[{"data":1,"prerenderedAt":8249},["ShallowReactive",2],{"docs-nav-docs_en":3,"docs-search-docs_en":253,"doc-docs_en-\u002Fdocs\u002Fapi\u002Freference\u002Fconversations":6206,"surround-docs_en-\u002Fdocs\u002Fapi\u002Freference\u002Fconversations":8248},[4],{"title":5,"path":6,"stem":7,"children":8,"page":62},"Docs","\u002Fdocs","docs",[9,13,17,21,63,96,109,150,179,183,212,216,220,245,249],{"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":62},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F04.concepts",[26,30,34,38,42,46,50,54,58],{"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",{"title":59,"path":60,"stem":61},"Wagy, your assistant","\u002Fdocs\u002Fconcepts\u002Fwagy","docs\u002F04.concepts\u002F9.wagy",false,{"title":64,"path":65,"stem":66,"children":67,"page":62},"Channels","\u002Fdocs\u002Fchannels","docs\u002F05.channels",[68,72,76,80,84,88,92],{"title":69,"path":70,"stem":71},"WhatsApp","\u002Fdocs\u002Fchannels\u002Fwhatsapp","docs\u002F05.channels\u002F01.whatsapp",{"title":73,"path":74,"stem":75},"Web chat","\u002Fdocs\u002Fchannels\u002Fwebchat","docs\u002F05.channels\u002F02.webchat",{"title":77,"path":78,"stem":79},"Telegram","\u002Fdocs\u002Fchannels\u002Ftelegram","docs\u002F05.channels\u002F03.telegram",{"title":81,"path":82,"stem":83},"Pauses and Status","\u002Fdocs\u002Fchannels\u002Fpauses-and-status","docs\u002F05.channels\u002F04.pauses-and-status",{"title":85,"path":86,"stem":87},"Inbox","\u002Fdocs\u002Fchannels\u002Finbox","docs\u002F05.channels\u002F05.inbox",{"title":89,"path":90,"stem":91},"Form","\u002Fdocs\u002Fchannels\u002Fform","docs\u002F05.channels\u002F06.form",{"title":93,"path":94,"stem":95},"Instagram","\u002Fdocs\u002Fchannels\u002Finstagram","docs\u002F05.channels\u002F07.instagram",{"title":97,"path":98,"stem":99,"children":100,"page":62},"Bot and knowledge","\u002Fdocs\u002Fbot","docs\u002F06.bot",[101,105],{"title":102,"path":103,"stem":104},"The bot and the AI","\u002Fdocs\u002Fbot\u002Foverview","docs\u002F06.bot\u002F01.overview",{"title":106,"path":107,"stem":108},"Bot knowledge","\u002Fdocs\u002Fbot\u002Fknowledge","docs\u002F06.bot\u002F02.knowledge",{"title":110,"path":111,"stem":112,"children":113,"page":62},"Work, map and rules","\u002Fdocs\u002Fwork","docs\u002F07.work",[114,118,122,126,130,134,138,142,146],{"title":115,"path":116,"stem":117},"Work and actions","\u002Fdocs\u002Fwork\u002Ftasks-and-actions","docs\u002F07.work\u002F01.tasks-and-actions",{"title":119,"path":120,"stem":121},"Map and addresses","\u002Fdocs\u002Fwork\u002Fmap-and-addresses","docs\u002F07.work\u002F02.map-and-addresses",{"title":123,"path":124,"stem":125},"Rules","\u002Fdocs\u002Fwork\u002Fflows","docs\u002F07.work\u002F03.flows",{"title":127,"path":128,"stem":129},"Rule conditions","\u002Fdocs\u002Fwork\u002Fconditions","docs\u002F07.work\u002F04.conditions",{"title":131,"path":132,"stem":133},"Zones","\u002Fdocs\u002Fwork\u002Fzones","docs\u002F07.work\u002F05.zones",{"title":135,"path":136,"stem":137},"Customer tracking portal","\u002Fdocs\u002Fwork\u002Ftracking-portal","docs\u002F07.work\u002F06.tracking-portal",{"title":139,"path":140,"stem":141},"Payments with Mercado Pago","\u002Fdocs\u002Fwork\u002Fpayments","docs\u002F07.work\u002F07.payments",{"title":143,"path":144,"stem":145},"Flows","\u002Fdocs\u002Fwork\u002Fservice-flows","docs\u002F07.work\u002F08.service-flows",{"title":147,"path":148,"stem":149},"Expenses and transactions","\u002Fdocs\u002Fwork\u002Fexpenses","docs\u002F07.work\u002F09.expenses",{"title":151,"path":152,"stem":153,"children":154,"page":62},"Team","\u002Fdocs\u002Fteam","docs\u002F08.team",[155,159,163,167,171,175],{"title":156,"path":157,"stem":158},"Team Telegram","\u002Fdocs\u002Fteam\u002Ftelegram-team","docs\u002F08.team\u002F01.telegram-team",{"title":160,"path":161,"stem":162},"Roles and permissions","\u002Fdocs\u002Fteam\u002Froles","docs\u002F08.team\u002F02.roles",{"title":164,"path":165,"stem":166},"Notifications","\u002Fdocs\u002Fteam\u002Fnotifications","docs\u002F08.team\u002F03.notifications",{"title":168,"path":169,"stem":170},"Team commissions","\u002Fdocs\u002Fteam\u002Fcommissions","docs\u002F08.team\u002F04.commissions",{"title":172,"path":173,"stem":174},"Partners and collaborators","\u002Fdocs\u002Fteam\u002Fpartners","docs\u002F08.team\u002F05.partners",{"title":176,"path":177,"stem":178},"Focus, one task at a time","\u002Fdocs\u002Fteam\u002Ffocus","docs\u002F08.team\u002F06.focus",{"title":180,"path":181,"stem":182},"Quickstart","\u002Fdocs\u002Fquickstart","docs\u002F09.quickstart",{"title":184,"path":185,"stem":186,"children":187,"page":62},"API","\u002Fdocs\u002Fapi","docs\u002F10.api",[188,192,196,200,204,208],{"title":189,"path":190,"stem":191},"Authentication","\u002Fdocs\u002Fapi\u002Fauthentication","docs\u002F10.api\u002F1.authentication",{"title":193,"path":194,"stem":195},"Conventions","\u002Fdocs\u002Fapi\u002Fconventions","docs\u002F10.api\u002F2.conventions",{"title":197,"path":198,"stem":199},"Endpoints","\u002Fdocs\u002Fapi\u002Fendpoints","docs\u002F10.api\u002F3.endpoints",{"title":201,"path":202,"stem":203},"Webhooks","\u002Fdocs\u002Fapi\u002Fwebhooks","docs\u002F10.api\u002F4.webhooks",{"title":205,"path":206,"stem":207},"TypeScript and Python SDKs","\u002Fdocs\u002Fapi\u002Fsdks","docs\u002F10.api\u002F5.sdks",{"title":209,"path":210,"stem":211},"API reference","\u002Fdocs\u002Fapi\u002Freference","docs\u002F10.api\u002F6.reference",{"title":213,"path":214,"stem":215},"MCP and AI agents","\u002Fdocs\u002Fmcp","docs\u002F11.mcp",{"title":217,"path":218,"stem":219},"Recipes","\u002Fdocs\u002Frecipes","docs\u002F12.recipes",{"title":221,"path":222,"stem":223,"children":224,"page":62},"What happens if…?","\u002Fdocs\u002Fque-pasa-si","docs\u002F13.que-pasa-si",[225,229,233,237,241],{"title":226,"path":227,"stem":228},"What happens if…? Bookings and deposits","\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas","docs\u002F13.que-pasa-si\u002F01.senas-y-reservas",{"title":230,"path":231,"stem":232},"What happens if…? Notices and channels","\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales","docs\u002F13.que-pasa-si\u002F02.avisos-y-canales",{"title":234,"path":235,"stem":236},"What happens if…? The bot","\u002Fdocs\u002Fque-pasa-si\u002Fbot","docs\u002F13.que-pasa-si\u002F03.bot",{"title":238,"path":239,"stem":240},"What happens if…? Services and tasks","\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas","docs\u002F13.que-pasa-si\u002F04.servicios-y-tareas",{"title":242,"path":243,"stem":244},"What happens if…? Subscription and cancellation","\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja","docs\u002F13.que-pasa-si\u002F05.plan-y-baja",{"title":246,"path":247,"stem":248},"Connect Fiuit to your AI","\u002Fdocs\u002Fconectar-tu-ia","docs\u002F14.conectar-tu-ia",{"title":250,"path":251,"stem":252},"Set up Fiuit with Claude or ChatGPT","\u002Fdocs\u002Fconfigurar-con-tu-ia","docs\u002F15.configurar-con-tu-ia",[254,258,264,269,273,278,281,286,291,296,302,307,312,317,322,327,332,335,340,345,350,355,359,364,368,371,376,381,386,391,394,399,404,409,414,419,424,429,434,439,444,449,454,459,462,467,472,477,482,487,490,495,500,505,510,515,520,525,530,535,538,543,548,553,556,561,566,571,576,579,584,589,594,597,602,607,610,615,620,625,630,635,640,645,650,653,658,663,668,673,678,683,688,693,698,703,708,711,716,721,726,731,736,741,745,749,752,757,762,767,771,775,779,784,788,791,796,801,806,811,816,821,824,829,834,839,844,849,854,859,864,867,872,877,882,885,890,894,899,903,907,911,916,921,924,929,934,939,944,949,954,959,964,968,973,976,981,986,991,996,1001,1006,1011,1014,1019,1024,1029,1034,1039,1044,1049,1054,1059,1064,1069,1074,1079,1084,1089,1094,1099,1104,1109,1114,1119,1124,1129,1134,1139,1142,1147,1152,1157,1162,1167,1172,1177,1180,1185,1190,1195,1200,1205,1208,1213,1218,1223,1228,1233,1236,1241,1246,1251,1256,1260,1265,1270,1275,1280,1285,1290,1295,1298,1303,1308,1313,1318,1321,1326,1331,1336,1341,1346,1351,1356,1361,1366,1371,1376,1381,1386,1389,1394,1399,1404,1409,1414,1419,1423,1428,1431,1436,1441,1446,1451,1456,1461,1465,1468,1473,1478,1483,1488,1493,1498,1503,1508,1513,1518,1521,1526,1531,1536,1541,1546,1551,1556,1561,1566,1571,1576,1579,1584,1589,1594,1599,1604,1607,1612,1616,1621,1626,1631,1635,1638,1643,1648,1653,1656,1661,1666,1671,1676,1681,1686,1691,1694,1699,1704,1709,1714,1719,1724,1729,1734,1737,1742,1747,1752,1757,1760,1765,1770,1775,1780,1785,1788,1793,1798,1803,1808,1813,1817,1822,1827,1832,1837,1842,1847,1850,1855,1860,1865,1870,1875,1878,1883,1888,1893,1897,1902,1907,1911,1915,1919,1924,1927,1932,1937,1942,1947,1952,1957,1962,1967,1972,1977,1982,1987,1992,1997,2002,2007,2012,2017,2022,2027,2032,2037,2042,2047,2052,2057,2062,2067,2072,2077,2082,2087,2092,2097,2102,2107,2112,2117,2122,2127,2132,2137,2142,2147,2152,2157,2162,2167,2172,2177,2182,2187,2192,2197,2202,2207,2212,2217,2222,2227,2232,2237,2242,2247,2252,2257,2262,2267,2272,2277,2282,2287,2292,2297,2302,2307,2312,2317,2322,2327,2332,2337,2342,2347,2352,2357,2362,2367,2372,2377,2382,2387,2392,2397,2402,2407,2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2477,2482,2487,2492,2497,2502,2507,2512,2517,2522,2527,2532,2537,2542,2547,2552,2557,2562,2567,2572,2577,2582,2587,2592,2597,2602,2607,2612,2617,2622,2627,2632,2637,2642,2647,2652,2657,2662,2667,2672,2677,2682,2687,2692,2697,2702,2707,2712,2717,2722,2727,2732,2737,2742,2747,2752,2757,2762,2767,2772,2777,2782,2787,2792,2797,2802,2807,2812,2817,2822,2827,2832,2837,2842,2847,2852,2857,2862,2867,2872,2877,2882,2887,2892,2897,2902,2907,2912,2917,2922,2927,2932,2937,2942,2947,2952,2957,2962,2967,2972,2977,2982,2987,2992,2997,3002,3007,3012,3017,3022,3027,3032,3037,3042,3047,3052,3057,3062,3067,3072,3077,3082,3087,3092,3097,3102,3107,3112,3117,3122,3127,3132,3137,3142,3147,3152,3157,3162,3167,3172,3177,3182,3187,3192,3197,3202,3207,3212,3217,3222,3227,3232,3237,3242,3247,3252,3257,3262,3267,3272,3277,3282,3287,3292,3297,3302,3307,3312,3317,3322,3327,3332,3337,3342,3347,3352,3357,3362,3367,3372,3377,3382,3387,3392,3397,3402,3407,3412,3417,3422,3427,3432,3437,3442,3447,3452,3457,3462,3467,3472,3477,3482,3487,3492,3497,3502,3507,3512,3517,3522,3527,3532,3537,3542,3547,3552,3557,3562,3567,3572,3577,3582,3587,3592,3597,3602,3607,3612,3617,3622,3627,3632,3637,3642,3647,3652,3657,3662,3667,3672,3677,3682,3687,3692,3697,3702,3707,3712,3717,3722,3727,3732,3737,3742,3747,3752,3757,3762,3767,3772,3777,3782,3787,3792,3797,3802,3807,3812,3817,3822,3827,3832,3837,3842,3847,3852,3857,3862,3867,3872,3877,3882,3887,3892,3897,3902,3907,3912,3917,3922,3927,3930,3935,3940,3945,3950,3955,3960,3965,3970,3975,3980,3985,3990,3995,4000,4005,4009,4014,4019,4024,4029,4034,4039,4042,4047,4052,4057,4062,4067,4072,4077,4082,4087,4092,4097,4102,4105,4110,4115,4120,4125,4130,4135,4140,4145,4150,4155,4160,4165,4170,4175,4180,4185,4190,4195,4200,4205,4210,4215,4220,4225,4230,4235,4240,4245,4250,4255,4260,4265,4270,4275,4280,4285,4290,4295,4300,4305,4310,4315,4320,4325,4330,4335,4340,4345,4350,4355,4360,4365,4370,4375,4380,4385,4390,4395,4400,4405,4410,4415,4420,4425,4430,4435,4440,4445,4450,4455,4460,4465,4470,4475,4480,4485,4488,4493,4498,4503,4508,4513,4518,4523,4528,4533,4538,4543,4548,4553,4558,4563,4568,4573,4578,4583,4588,4593,4598,4603,4608,4613,4618,4623,4628,4633,4638,4643,4648,4653,4658,4663,4668,4673,4676,4681,4686,4691,4696,4701,4706,4711,4716,4721,4726,4731,4736,4741,4746,4751,4756,4761,4766,4771,4776,4781,4786,4791,4796,4801,4806,4811,4816,4821,4826,4831,4836,4841,4846,4851,4856,4861,4866,4871,4876,4881,4886,4891,4896,4901,4906,4911,4916,4921,4926,4931,4936,4941,4946,4951,4956,4961,4966,4971,4976,4981,4986,4991,4996,5001,5006,5011,5016,5021,5026,5031,5036,5041,5046,5051,5056,5061,5066,5071,5076,5081,5086,5091,5096,5099,5104,5109,5114,5119,5124,5129,5134,5139,5142,5147,5152,5157,5162,5167,5172,5177,5182,5187,5192,5197,5202,5207,5212,5217,5222,5227,5232,5237,5242,5247,5252,5257,5262,5267,5272,5277,5282,5287,5292,5297,5302,5307,5312,5317,5322,5327,5332,5337,5342,5347,5352,5357,5362,5367,5372,5377,5382,5387,5392,5397,5402,5407,5412,5417,5422,5427,5432,5437,5442,5447,5452,5457,5462,5467,5472,5477,5482,5487,5492,5497,5502,5507,5512,5517,5522,5527,5532,5537,5542,5547,5552,5557,5562,5567,5572,5577,5582,5587,5592,5597,5602,5607,5612,5617,5622,5627,5632,5637,5642,5647,5652,5657,5662,5667,5672,5677,5682,5687,5692,5697,5702,5707,5712,5717,5722,5727,5732,5737,5742,5747,5752,5757,5762,5767,5772,5777,5780,5784,5789,5794,5799,5804,5809,5814,5819,5824,5829,5834,5839,5844,5849,5854,5859,5864,5869,5874,5879,5884,5889,5894,5899,5904,5909,5914,5919,5924,5929,5934,5939,5944,5949,5954,5959,5964,5969,5974,5979,5984,5989,5994,5999,6004,6007,6012,6017,6022,6027,6032,6037,6042,6047,6052,6057,6062,6067,6072,6077,6082,6087,6092,6097,6102,6107,6112,6117,6122,6127,6130,6135,6140,6145,6150,6155,6160,6165,6170,6175,6178,6183,6188,6193,6198,6202],{"id":11,"title":10,"titles":255,"content":256,"level":257},[],"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":259,"title":260,"titles":261,"content":262,"level":263},"\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":265,"title":266,"titles":267,"content":268,"level":263},"\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 and My business: your catalog (services, products and plans), your resources (zones, spaces and equipment), your flows, your team and your business details, in tabs.Bot: personality, knowledge and simulator. Customer care → Automatic messages: reminders and rules with conditions.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.Finance: payments, cash, commissions and period results. Settings: Payments, Plan and usage and Advanced.",{"id":270,"title":64,"titles":271,"content":272,"level":263},"\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":274,"title":275,"titles":276,"content":277,"level":263},"\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 Rules.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":279,"content":280,"level":257},[],"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 is valid for 30 minutes, works only once and asks for a new password of 12 to 128 characters. If it doesn't arrive, check spam and, after a minute, tap Send it again on the same screen. While you type your password, Wagy closes its eyes; use the eye in the field to see what you typed.",{"id":282,"title":283,"titles":284,"content":285,"level":263},"\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":287,"title":288,"titles":289,"content":290,"level":263},"\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. The Owner, Managers and Collaborators use it, according to their permissions. 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. Not sure how to do something? Ask Wagy, for example «how do I connect WhatsApp?»: it answers with the steps from these guides and a link to the guide. If it is not documented, it says so, without making anything up, and offers to put you in touch with a person on the Fiuit team. 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":292,"title":293,"titles":294,"content":295,"level":263},"\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: My business → Details: name, time zone, currency, language, address and cancellation policy.My business → Catalog: services, products and subscriptions. Filter by type, status and category; open a plan to see its subscribers. Zones, rooms, equipment and vehicles live in My business → Team and resources.My business → Team and resources: people, schedules, roles and invitations. Tap Add to create or invite a person; open their profile to manage access and agenda links (see roles and permissions).",{"id":297,"title":298,"titles":299,"content":300,"level":301},"\u002Fdocs\u002Fgetting-started#photos-profile-team-and-logo","Photos: profile, team and logo",[14,293],"Every photo in the panel uses the same photo editor: tap the photo (or Choose photo), take one with your phone's camera, pick one from the gallery or, on a computer, drag it in or paste it with Ctrl\u002FCmd+V. For your profile photo (My account) and each person's photo (their profile in People) the editor opens: drag to frame, pinch or scroll to zoom, rotate and check how it looks in lists and on the profile before tapping Done. The logo (My business → Details) is never cropped: transparency is kept and it's saved as a square thumbnail. iPhone photos (HEIC) work too. The photo is shrunk on your phone before uploading (a few KB) and saved without its location or other file data.",3,{"id":303,"title":304,"titles":305,"content":306,"level":263},"\u002Fdocs\u002Fgetting-started#_4-connect-a-channel","4. Connect a channel",[14],"Go to Customer care → 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":308,"title":309,"titles":310,"content":311,"level":263},"\u002Fdocs\u002Fgetting-started#_5-test-the-bot","5. Test the bot",[14],"Before opening it to real customers, use the Simulator under Customer care → 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":313,"title":314,"titles":315,"content":316,"level":263},"\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 customer (search for one or create it), then the service. The next free time already appears suggested: tap Continue or change it.Check the summary (co-responsibles, repeat and notes are under More options) and tap Create. The task shows up in Today and in Work.",{"id":318,"title":319,"titles":320,"content":321,"level":263},"\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 «View» pick what to show: «Today» (the day), «Upcoming» (today and the next 7 days, grouped by day), «Completed» (finished work from any day, newest first; «Load more» brings the next page) or «Pending» (all open work, in Overdue, Today and Upcoming blocks, with no date limit). Cancelled tasks only show in Work. From each task you move to the next stage with the available actions. Continue with Work and actions.",{"id":323,"title":324,"titles":325,"content":326,"level":263},"\u002Fdocs\u002Fgetting-started#next-steps","Next steps",[14],"Rules 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":328,"title":329,"titles":330,"content":331,"level":263},"\u002Fdocs\u002Fgetting-started#wagy-permissions","Wagy permissions",[14],"Wagy uses the same permissions as the dashboard and API: it only offers actions allowed for your role. If your access changes before you confirm a plan, it checks again and does not apply changes without permission. Operational staff and viewers still do not have access to Wagy.",{"id":19,"title":18,"titles":333,"content":334,"level":257},[],"Architecture, principles and the life of a message, from arriving on a channel to becoming a task, an action or an alert.",{"id":336,"title":337,"titles":338,"content":339,"level":263},"\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":341,"title":342,"titles":343,"content":344,"level":263},"\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 rules. Automatically creating queued deliveries through chat: coming soon.",{"id":346,"title":347,"titles":348,"content":349,"level":263},"\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 rules generate alerts and permitted actions. Fiuit also answers questions and hands off to a person; not every message needs to create a task.",{"id":351,"title":352,"titles":353,"content":354,"level":263},"\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":356,"title":123,"titles":357,"content":358,"level":263},"\u002Fdocs\u002Fhow-it-works#rules",[18],"A rule 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":360,"title":361,"titles":362,"content":363,"level":263},"\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":365,"title":275,"titles":366,"content":367,"level":263},"\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":369,"content":370,"level":257},[],"Organizations, workspaces, roles, resources and resource teams.",{"id":372,"title":373,"titles":374,"content":375,"level":263},"\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":377,"title":378,"titles":379,"content":380,"level":263},"\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 Team members 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":382,"title":383,"titles":384,"content":385,"level":263},"\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",{"id":387,"title":388,"titles":389,"content":390,"level":263},"\u002Fdocs\u002Fconcepts\u002Fworkspaces-and-resources#resource-teams","Resource teams",[27],"A resource team is an interchangeable pool (\"any barber\", \"laser machines\"). Services require teams, 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} Manage teams in My business → Team and resources, titled Work teams. The Team role grants panel access; it is not required for work-team membership. A person can receive tasks without an account or phone. Invite them later with Invite to the panel in their profile. Each team shows the services using it and the zones served by its members. Person profiles and creation do not ask for a serving mode. 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":392,"content":393,"level":257},[],"Services, multi-resource requirements, schedules and how slots are computed.",{"id":395,"title":396,"titles":397,"content":398,"level":263},"\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)booking_paymentWhat is charged when confirming an appointment: none, deposit or total (the task's value)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, their choice or remotelycolorColor 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":400,"title":401,"titles":402,"content":403,"level":263},"\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":405,"title":406,"titles":407,"content":408,"level":263},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#requirements","Requirements",[31],"A requirement says: from this team, 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":410,"title":411,"titles":412,"content":413,"level":263},"\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). Hours past midnight. If the closing time is earlier than or equal to the opening time, the range ends the next day: [\"20:00\", \"03:00\"] shows as 20:00 – 03:00 (+1). The night belongs to the day it opens: Friday 20:00 – 03:00 (+1) runs until Saturday 03:00 even if Saturday is closed, and closing Friday removes that whole night. 24 hours is written [\"00:00\", \"00:00\"]. A range that overlaps the next day's early hours can't be saved. A booking can cross midnight without being cut, and asking for one day of times (bot, public booking, GET \u002Fv1\u002Fslots?day=) includes that night's times after 00:00. Daylight saving changes are respected: a night with a clock change lasts its real 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":415,"title":416,"titles":417,"content":418,"level":301},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#blocking-time","Blocking time",[31,411],"A block is an override for the day: the whole day (closed) or some hours (saved as the ranges that are still open that day: the weekly hours minus the blocked time). In the panel the same dialog blocks from the Calendar (tap a free slot or drag over the grid), from each resource's page (Hours and blocks) and, separately, from the service (Pause for a period, which closes only that service and does not block the resources that provide it). You can pick one or several resources, a range of days, or repeat it every week. Tasks already in that time are flagged and never moved automatically. If several resources share the same schedule, the block applies to all of them.",{"id":420,"title":421,"titles":422,"content":423,"level":301},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#the-services-own-days-and-hours","The service's own days and hours",[31,411],"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.",{"id":425,"title":426,"titles":427,"content":428,"level":263},"\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":430,"title":431,"titles":432,"content":433,"level":263},"\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.Remote: a video or phone session. No address is asked for or shown: not in the bot, not in web booking, not in notices. You can add the service's meeting link (your video call room): the bot shares it when confirming and reminders repeat it. Fiuit does not generate the link. 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":435,"title":436,"titles":437,"content":438,"level":263},"\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":440,"title":441,"titles":442,"content":443,"level":263},"\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 team 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":445,"title":446,"titles":447,"content":448,"level":263},"\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.",{"id":450,"title":451,"titles":452,"content":453,"level":263},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#delete-and-archive","Delete and archive",[31],"Paused and archived are not the same. Paused is temporary: the service, product, team or resource shows dimmed in the catalog with “Reactivate” and does not appear in work filters or the bot. Archived is out of sight: it only shows under “Archived” (at the end of the catalog, collapsed and hidden when empty), with “Restore”. ⋯ → Delete really removes it if it has no history (no task, payment or record uses it) and archives it if it does; the dialog says which one happens. An archived item disappears everywhere (catalog, filters, pickers, bot, business site, Wagy and suggestions), but old tasks and payments keep showing its name. With future tasks it is not deleted: they are shown so you can reassign or cancel them first. Restore leaves it paused. Filters and pickers offer only what is active; a paused or archived item is offered only when there are tasks with it, marked “(paused)” or “(archived)”. API and MCP: DELETE with ?mode=remove|archive|delete (admin permission; without mode it pauses, as always), GET …\u002Fremoval to see what would happen and POST …\u002Frestore.",{"id":455,"title":456,"titles":457,"content":458,"level":263},"\u002Fdocs\u002Fconcepts\u002Fservices-and-availability#test-a-flow","Test a flow",[31],"In My business → Stages, inside a flow, ▶ Test flow (on the phone, ▶ Test) walks through the draft on your screen, even if you haven't saved it. Only whoever can edit flows (the Owner) sees it. View as: Team sees every screen; Customer sees only the items and buttons marked «Customer». If a stage has nothing for the customer, the test says «The customer does not see this stage: the team completes it» and offers to continue as the team.Data: fill in each item or tap Fill with an example. A button does not advance if the items it requires are missing, and the test says which.Paths: the stage's buttons and, for the team, the fixed exits that apply at that point (Cancel, Reschedule, No show and, during service, Close without completing with its reason).Map and log: the map marks where the test is. What would happen lists each step: the notice to the customer or the team (with the message's example text), the assignment and the data that would be saved.Restart goes back to the first stage. The test saves nothing, notifies nobody, charges nothing and sends no messages, and leaves no tasks, history or audit entries. It does not simulate timing or deferred reminders, the customer link or payment. 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":460,"content":461,"level":257},[],"Booking states, the 10-minute hold, deposits and the no-double-booking guarantee.",{"id":463,"title":464,"titles":465,"content":466,"level":263},"\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":468,"title":469,"titles":470,"content":471,"level":263},"\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":473,"title":474,"titles":475,"content":476,"level":263},"\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":478,"title":479,"titles":480,"content":481,"level":263},"\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":483,"title":484,"titles":485,"content":486,"level":263},"\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. Each service chooses what is charged when booking with booking_payment: none (nothing), deposit (the deposit) or total (the task's full value, calculated by the server). With total the booking follows the same path as a deposit: pending_payment, expiry, refund by the cancellation window and late payment in review.",{"id":40,"title":39,"titles":488,"content":489,"level":257},[],"Simple reminders and confirmations, quiet hours and execution guarantees. For waits and conditions, see rules. There are two automation tools: Reminders: \"when this happens, send that message\". They are the simplest way to send reminders and confirmations. They are managed in Customer care → Automatic messages.Rules: they wait, decide with conditions and act on tasks. See Rules and Conditions.",{"id":491,"title":492,"titles":493,"content":494,"level":263},"\u002Fdocs\u002Fconcepts\u002Fautomations#reminders","Reminders",[39],"A reminder 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 reminder ever messages a customer while it is off.",{"id":496,"title":497,"titles":498,"content":499,"level":301},"\u002Fdocs\u002Fconcepts\u002Fautomations#triggers","Triggers",[39,492],"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 Reminders 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 reminder you see the latest sends with their status and the reason if one failed.",{"id":501,"title":502,"titles":503,"content":504,"level":263},"\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 reminders: 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 rule. For now these notices are configured through the API or MCP (service stages); the visual stage editor is coming soon. The stage and confirmation reminders you had were moved to their stages automatically, keeping their state (on or off).",{"id":506,"title":507,"titles":508,"content":509,"level":263},"\u002Fdocs\u002Fconcepts\u002Fautomations#recommended-for-your-business","Recommended for your business",[39],"Fiuit ships a small set of recommended reminders 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 Customer care → Automatic messages.Under Recommended for your business, check each reminder's message preview.Turn on the ones you want with the toggle. The section hides once nothing is left to activate.",{"id":511,"title":512,"titles":513,"content":514,"level":301},"\u002Fdocs\u002Fconcepts\u002Fautomations#win-back-customers-who-stop-coming","Win back customers who stop coming",[39,507],"One of the recommended reminders 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 reminder (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":516,"title":517,"titles":518,"content":519,"level":263},"\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":521,"title":522,"titles":523,"content":524,"level":263},"\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":526,"title":527,"titles":528,"content":529,"level":263},"\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":531,"title":532,"titles":533,"content":534,"level":263},"\u002Fdocs\u002Fconcepts\u002Fautomations#service-notices-and-delivery-log","Service notices and delivery log",[39],"In Customer care → Automatic messages, 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":536,"content":537,"level":257},[],"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":539,"title":540,"titles":541,"content":542,"level":263},"\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":544,"title":545,"titles":546,"content":547,"level":263},"\u002Fdocs\u002Fconcepts\u002Fglobal-search#what-it-searches","What it searches",[43],"Customers: name, phone (any format, or part of the number), Instagram or Telegram @username, 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":549,"title":550,"titles":551,"content":552,"level":263},"\u002Fdocs\u002Fconcepts\u002Fglobal-search#who-sees-what","Who sees what",[43],"Results respect your role: the Team and Viewer roles do not see customers, resources or services, and Team members 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":554,"content":555,"level":257},[],"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":557,"title":558,"titles":559,"content":560,"level":263},"\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":562,"title":563,"titles":564,"content":565,"level":263},"\u002Fdocs\u002Fconcepts\u002Fsales-results#in-the-products-and-subscriptions-lists","In the Products and Subscriptions lists",[47],"In My business → Catalog → Products and My business → Catalog (Subscription filter), each card shows its performance for the period (This month, Last month or 90 days, with a ▲▼ arrow against the previous period): for products, units sold in completed tasks and how many tasks include them; for subscriptions, how many were sold, customers active today, usage of their units and, for packages, how many expire in 30 days. Revenue and the sold amount appear only if your role can see money.",{"id":567,"title":568,"titles":569,"content":570,"level":263},"\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":572,"title":573,"titles":574,"content":575,"level":263},"\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. Team and Viewer roles get no money and no customer names.",{"id":52,"title":51,"titles":577,"content":578,"level":257},[],"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":580,"title":581,"titles":582,"content":583,"level":263},"\u002Fdocs\u002Fconcepts\u002Fvocabulary#changing-the-names-step-by-step","Changing the names, step by step",[51],"Go to Settings → Vocabulary (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":585,"title":586,"titles":587,"content":588,"level":263},"\u002Fdocs\u002Fconcepts\u002Fvocabulary#one-name-per-resource-type","One name per resource type",[51],"Each type (room, equipment, table, vehicle, zone) can have its own name: «Courts» instead of «Rooms». It shows in My business, forms, New task, the calendar and the bot's messages. When the business is set up, we take the word you use («we have 4 courts»); if you don't say one, your industry's word is used.To change it, use Vocabulary or ask Wagy.With known words («court», «van», «appointment») the gender adjusts by itself; with others, pick it in Gender.",{"id":590,"title":591,"titles":592,"content":593,"level":263},"\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":595,"content":596,"level":257},[],"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":598,"title":599,"titles":600,"content":601,"level":263},"\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 My business → Details → 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":603,"title":604,"titles":605,"content":606,"level":263},"\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":60,"title":59,"titles":608,"content":609,"level":257},[],"What Wagy is, what it can do with your permissions, how to ask for things, undo, and apply batch changes. Wagy is Fiuit's assistant inside the panel. You ask for something in your own words and it builds a proposal; nothing changes until it is applied at your confirmation level.",{"id":611,"title":612,"titles":613,"content":614,"level":263},"\u002Fdocs\u002Fconcepts\u002Fwagy#where-it-appears","Where it appears",[59],"The Wagy button, on any screen. On a phone it fills the screen, with Chat and Board tabs.⤢ (desktop and tablet): the control screen, with today's orders, team, conversations, cash and «How are we doing?».The ✦ buttons in the «+ New…» menus and the «?» help on each screen.For Owners and Managers.",{"id":616,"title":617,"titles":618,"content":619,"level":263},"\u002Fdocs\u002Fconcepts\u002Fwagy#what-it-can-do","What it can do",[59],"Wagy uses the same tools as the API and the MCP, always with your role and permissions. If you can't do it in the panel, neither can Wagy. Ask: «how much did I collect this week?», «how much Intelligence do I have left?». Read-only questions are answered right away.Operate: schedule, reschedule or cancel tasks, edit customers, send messages, add products, build flows, change your website and the vocabulary.Read files: a photo or a PDF (up to 10 MB and 10 pages) and voice notes; Wagy reads it once, deletes it and shows you a proposal.Ask Fiuit support for help with the error already filled in.",{"id":621,"title":622,"titles":623,"content":624,"level":263},"\u002Fdocs\u002Fconcepts\u002Fwagy#how-to-ask-for-things","How to ask for things",[59],"Write what you need: «create a task for Ana on Friday at 10».Wagy shows the proposal with the concrete changes.You confirm, or the countdown applies it by itself if your level allows it. If something is missing it asks with buttons (for example, the next free times). What a customer wrote is never an order: if Wagy read it, it always asks you to confirm.",{"id":626,"title":627,"titles":628,"content":629,"level":301},"\u002Fdocs\u002Fconcepts\u002Fwagy#levels","Levels",[59,622],"In ⤢ → Wagy level: LevelWhat it doesAsk for everythingYou confirm every change.Accept internalDoes internal, undoable things by itself, with 10 s to stop it. Anything that reaches the customer or moves money, it asks first.AutopilotDoes everything; what touches the customer or money waits 10 s so you can stop it. The Owner sets the project ceiling and nobody goes past it. In Does it by itself you choose which actions it can take without asking. Changes that require explicit confirmation and steps involving external systems always need confirmation, even in Autopilot.",{"id":631,"title":632,"titles":633,"content":634,"level":263},"\u002Fdocs\u002Fconcepts\u002Fwagy#undo","Undo",[59],"When Wagy does something by itself you see «Doing it in 10 s» with Undo and Now. Later, in What Wagy did (or in the plan), tap Undo while it is still possible, even for a reschedule. If someone changed the data since then, Wagy asks you to review it first.",{"id":636,"title":637,"titles":638,"content":639,"level":263},"\u002Fdocs\u002Fconcepts\u002Fwagy#batch-actions","Batch actions",[59],"If you ask for several changes at once («move the 7 overdue ones to tomorrow»): You confirm just once.They are applied one at a time, each with its own countdown.Stop this one halts one; Pause all and Resume control the rest.Each change is undone separately.What doesn't fit (no free time, a conflict) is marked so you can choose, without stopping the rest.",{"id":641,"title":642,"titles":643,"content":644,"level":263},"\u002Fdocs\u002Fconcepts\u002Fwagy#examples-by-role","Examples by role",[59],"RoleCan askWhat it won't doOwner«Change my website's cover line», «build a delivery flow», «switch to Autopilot».Anything outside your permissions, or go past the ceiling you set.Manager«Reschedule my overdue tasks», «message Lucía», «what's on today?».Raise the level above the Owner's ceiling.TeamDoesn't use Wagy: works with Focus and the Today screen.— Wagy also doesn't make up data, doesn't act on its own on anything that reaches the customer without your confirmation or countdown, and doesn't send your customers' data to support.",{"id":646,"title":647,"titles":648,"content":649,"level":263},"\u002Fdocs\u002Fconcepts\u002Fwagy#more","More",[59],"MCP and AI agents: the same tools from Claude or ChatGPT.Connect Fiuit to your AI.What if…? Services and tasks.",{"id":70,"title":69,"titles":651,"content":652,"level":257},[],"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":654,"title":655,"titles":656,"content":657,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#connect-a-number","Connect a number",[69],"In the dashboard, go to Customer care → 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. The bot simulator is not a WhatsApp connection: it is not listed and does not count toward your plan. You will find it in Quick test, further down the same screen.",{"id":659,"title":660,"titles":661,"content":662,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#with-qr-or-official-meta","With QR or Official (Meta)",[69],"The WhatsApp screen has two tabs and opens the one for the channel you are using (the QR one if there is none). Each shows its real status (connected, disconnected or reconnecting) and the action to take. With QR: connects in a minute by scanning the QR with the number you already use, and it is free. Meta can block the number if you message many people who did not write to you first, so it is not for bulk sending, and the phone has to keep the session open.Official (Meta): requires verifying the business with Meta and the number must not be in the regular app. There is no risk of being blocked and approved templates let you write first, but Meta charges for each conversation the business starts. The status is checked every 5 minutes, also when the connection is down: when it comes back, it turns Connected on its own. If it drops, the dashboard notifies the business.",{"id":664,"title":665,"titles":666,"content":667,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#your-plan-limits","Your plan limits",[69],"Each plan includes a number of connections, and all of them count: a WhatsApp number, an Instagram account, a Telegram bot and your published website chat. Solo: 2 connections, with a single WhatsApp number. That is, the WhatsApp number plus one other connection: Instagram, Telegram or your website chat.Team plan: 3 connections. Pro: 5 connections. Both also have a single WhatsApp number.Business: custom, and the only plan with more than one WhatsApp number. When you reach the limit, the connect button is disabled (it does not disappear), with a short text explaining the limit and a link to Settings → Plan to change plan. Reconnecting or updating a connection you already have does not count as a new one. Customer care → Channels shows how many you use, for example “1 of 2 connections” and “1 of 1 WhatsApp number”. Moving to a lower plan: not possible while the business exceeds any limit of the new plan. First disconnect what is over the limit; nothing is deleted automatically.",{"id":669,"title":670,"titles":671,"content":672,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#customers-and-team","Customers and team",[69],"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":674,"title":675,"titles":676,"content":677,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#what-the-ai-can-and-cannot-do","What the AI can and cannot do",[69],"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":679,"title":680,"titles":681,"content":682,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#shared-location","Shared location",[69],"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":684,"title":685,"titles":686,"content":687,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#handing-off-to-a-person","Handing off to a person",[69],"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":689,"title":690,"titles":691,"content":692,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#audio-and-languages","Audio and languages",[69],"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":694,"title":695,"titles":696,"content":697,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#customer-name-and-contact","Customer name and contact",[69],"When someone writes to you, their profile fills in on its own with their number and the name they chose in their WhatsApp profile, if the profile had no name. If you type the name by hand, WhatsApp never replaces it.",{"id":699,"title":700,"titles":701,"content":702,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#customer-photo","Customer photo",[69],"WhatsApp does not share your customers' profile photo: their initials are shown instead. Owners and Managers can upload a photo from the customer profile if they want. If the same customer also writes on Telegram or Instagram, the photo from that channel is used.",{"id":704,"title":705,"titles":706,"content":707,"level":263},"\u002Fdocs\u002Fchannels\u002Fwhatsapp#pausing-the-channel","Pausing the channel",[69],"If there is spam or noise, you can pause the bot or the whole channel without disconnecting. See Pauses and Status.",{"id":74,"title":73,"titles":709,"content":710,"level":257},[],"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":712,"title":713,"titles":714,"content":715,"level":263},"\u002Fdocs\u002Fchannels\u002Fwebchat#install-step-by-step","Install step by step",[73],"As the Owner, go to Customer care → 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. Your plan limits how many connections you can have in total (on Solo, 2) and a single WhatsApp number, except on Business. See Your plan limits.",{"id":717,"title":718,"titles":719,"content":720,"level":263},"\u002Fdocs\u002Fchannels\u002Fwebchat#what-the-visitor-sees","What the visitor sees",[73],"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":722,"title":723,"titles":724,"content":725,"level":263},"\u002Fdocs\u002Fchannels\u002Fwebchat#continuity-across-pages-and-reloads","Continuity across pages and reloads",[73],"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":727,"title":728,"titles":729,"content":730,"level":263},"\u002Fdocs\u002Fchannels\u002Fwebchat#required-contact-details","Required contact details",[73],"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":732,"title":733,"titles":734,"content":735,"level":263},"\u002Fdocs\u002Fchannels\u002Fwebchat#language-and-first-message","Language and first message",[73],"No pre-filter: the web chat answers from the first message, without asking for a name and reason or a YES\u002FNO confirmation. That filter exists only on WhatsApp, Telegram and Instagram. Required contact details and the chat's usage limit still apply.In the visitor's language: the page language is only a starting point. If the first message is clearly in another language (for example «Hola, quiero saber los precios» on a Portuguese page), the bot answers in that one. A short greeting or «ok» does not change it. If you chose the language by hand in the customer card, that one wins.",{"id":737,"title":738,"titles":739,"content":740,"level":263},"\u002Fdocs\u002Fchannels\u002Fwebchat#bot-rules-per-channel","Bot rules per channel",[73],"Under Customer care → 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":742,"title":361,"titles":743,"content":744,"level":263},"\u002Fdocs\u002Fchannels\u002Fwebchat#security",[73],"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":746,"title":184,"titles":747,"content":748,"level":263},"\u002Fdocs\u002Fchannels\u002Fwebchat#api",[73],"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":78,"title":77,"titles":750,"content":751,"level":257},[],"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":753,"title":754,"titles":755,"content":756,"level":263},"\u002Fdocs\u002Fchannels\u002Ftelegram#connect-your-bot","Connect your bot",[77],"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 Customer care → 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. Your plan limits how many connections you can have in total (on Solo, 2) and a single WhatsApp number, except on Business. See Your plan limits.",{"id":758,"title":759,"titles":760,"content":761,"level":263},"\u002Fdocs\u002Fchannels\u002Ftelegram#what-it-does","What it does",[77],"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). It understands voice messages (transcribed; up to 2 minutes and 8 MB, within the project's monthly audio quota; if one can't be transcribed, the bot says so and hands the conversation to a person). Photos and other files get a notice that they can't be read. It does not process group or channel messages.There is no reply window like WhatsApp: you can answer whenever you want.",{"id":763,"title":764,"titles":765,"content":766,"level":263},"\u002Fdocs\u002Fchannels\u002Ftelegram#multichannel-identity","Multichannel identity",[77],"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":768,"title":680,"titles":769,"content":770,"level":263},"\u002Fdocs\u002Fchannels\u002Ftelegram#shared-location",[77],"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":772,"title":695,"titles":773,"content":774,"level":263},"\u002Fdocs\u002Fchannels\u002Ftelegram#customer-name-and-contact",[77],"When someone writes to you, their profile fills in on its own with their Telegram name (or their @username if they have no name), and the @username is kept so you can find them. If they share their own contact from Telegram, their phone number is saved on the profile and, if they already wrote to you on WhatsApp from that number, both conversations move to the same profile on their own. Owners and Managers get a «Customer linked across channels» notice (same phone number) that opens the profile; set it up in My account → Notifications. Someone else's contact card never links profiles. If you type the name by hand, Telegram never replaces it.",{"id":776,"title":700,"titles":777,"content":778,"level":263},"\u002Fdocs\u002Fchannels\u002Ftelegram#customer-photo",[77],"When a customer writes for the first time, their Telegram profile photo shows up on its own in the conversation, their profile, their tasks and the schedule, and it is refreshed from time to time when they write again. If the customer hid their photo in Telegram privacy settings, their initials are shown. Owners and Managers can change or remove it from the customer profile; a photo picked by hand is never replaced automatically. Only your team sees the photo.",{"id":780,"title":781,"titles":782,"content":783,"level":263},"\u002Fdocs\u002Fchannels\u002Ftelegram#status-and-pauses","Status and pauses",[77],"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":785,"title":527,"titles":786,"content":787,"level":263},"\u002Fdocs\u002Fchannels\u002Ftelegram#coming-soon",[77],"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. Only Ogg Opus and WAV are transcribed. Other declared MIME types are rejected before downloading. Stickers and animations are ignored. Temporary Telegram failures are retried with the worker backoff; if they persist through its five attempts, the conversation is handed to a person.",{"id":82,"title":81,"titles":789,"content":790,"level":257},[],"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":792,"title":793,"titles":794,"content":795,"level":263},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#pause-a-channel","Pause a channel",[81],"Every connected channel (WhatsApp, Telegram and web chat) can be paused without disconnecting it, in Customer care → 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 Customer care → 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":797,"title":798,"titles":799,"content":800,"level":263},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#pause-the-projects-ai","Pause the project's AI",[81],"It is an emergency switch in Settings → Plan: 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":802,"title":803,"titles":804,"content":805,"level":263},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#automatic-pause-for-spam-or-abuse","Automatic pause for spam or abuse",[81],"On by default, in Settings → Plan. 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":807,"title":808,"titles":809,"content":810,"level":263},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#my-service-status","My service status",[81],"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":812,"title":813,"titles":814,"content":815,"level":263},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#ai-usage","AI usage",[81],"Settings → Plan 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":817,"title":818,"titles":819,"content":820,"level":263},"\u002Fdocs\u002Fchannels\u002Fpauses-and-status#who-can-do-what","Who can do what",[81],"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":86,"title":85,"titles":822,"content":823,"level":257},[],"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":825,"title":826,"titles":827,"content":828,"level":263},"\u002Fdocs\u002Fchannels\u002Finbox#conversation-statuses","Conversation statuses",[85],"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":830,"title":831,"titles":832,"content":833,"level":263},"\u002Fdocs\u002Fchannels\u002Finbox#filter-the-list","Filter the list",[85],"Attention shows the conversations waiting for a person and All, the active ones from every channel.On the phone, View opens the rest: search by name or phone, the statuses with their count, Archived and Possible spam; the number on View tells how many filters are active.Possible spam gathers new contacts that look like spam or were quarantined, so you can review them before replying.To refresh the list on the phone, pull it down from the top.",{"id":835,"title":836,"titles":837,"content":838,"level":263},"\u002Fdocs\u002Fchannels\u002Finbox#more-filters-in-view","More filters in View",[85],"Channel shows only the conversations from WhatsApp, Instagram, Telegram or web chat; the channels that have conversations appear and you can pick several.Last message filters by Today, Last 7 days, Last 30 days or a Range between two dates, in the business time zone.Mine gathers the conversations you replied to.They combine with Attention, All and the statuses, each one adds one to the number on View and the panel remembers them for you in this browser.On the computer, they are under the Filters icon, next to the search.",{"id":840,"title":841,"titles":842,"content":843,"level":263},"\u002Fdocs\u002Fchannels\u002Finbox#resolve-archive-and-delete","Resolve, archive and delete",[85],"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":845,"title":846,"titles":847,"content":848,"level":263},"\u002Fdocs\u002Fchannels\u002Finbox#customer-context","Customer context",[85],"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. New task and the customer context live in the conversation header's ⋯; on a phone, the context opens as a sheet from there. 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. Team members 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":850,"title":851,"titles":852,"content":853,"level":263},"\u002Fdocs\u002Fchannels\u002Finbox#summarize-with-ai","Summarize with AI",[85],"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":855,"title":856,"titles":857,"content":858,"level":263},"\u002Fdocs\u002Fchannels\u002Finbox#permissions","Permissions",[85],"ActionOwner and ManagerTeamRead-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":860,"title":861,"titles":862,"content":863,"level":263},"\u002Fdocs\u002Fchannels\u002Finbox#first-contact-from-the-customer-profile","First contact from the customer profile",[85],"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 by QR: allows first-contact text without waiting for the customer to write first. 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":90,"title":89,"titles":865,"content":866,"level":257},[],"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":868,"title":869,"titles":870,"content":871,"level":263},"\u002Fdocs\u002Fchannels\u002Fform#turning-it-on-step-by-step","Turning it on, step by step",[89],"Sign in as the Owner, go to Customer care → 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":873,"title":874,"titles":875,"content":876,"level":263},"\u002Fdocs\u002Fchannels\u002Fform#how-you-reply","How you reply",[89],"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":878,"title":879,"titles":880,"content":881,"level":263},"\u002Fdocs\u002Fchannels\u002Fform#the-token","The token",[89],"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":94,"title":93,"titles":883,"content":884,"level":257},[],"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 available. If you don't see the Instagram card in Customer care → Channels, contact us and we will check.",{"id":886,"title":887,"titles":888,"content":889,"level":263},"\u002Fdocs\u002Fchannels\u002Finstagram#connect-your-account","Connect your account",[93],"Your Instagram account must be professional (Business or Creator). No Facebook Page is needed.In the panel, go to Customer care → 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. Your plan limits how many connections you can have in total (on Solo, 2) and a single WhatsApp number, except on Business. See Your plan limits.",{"id":891,"title":759,"titles":892,"content":893,"level":263},"\u002Fdocs\u002Fchannels\u002Finstagram#what-it-does",[93],"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 and confirmations offer quick replies: tap one to answer. You can also reply by typing. With more than 13 options no buttons appear; long titles are shortened.",{"id":895,"title":896,"titles":897,"content":898,"level":263},"\u002Fdocs\u002Fchannels\u002Finstagram#the-24-hour-rule","The 24-hour rule",[93],"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. 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":900,"title":695,"titles":901,"content":902,"level":263},"\u002Fdocs\u002Fchannels\u002Finstagram#customer-name-and-contact",[93],"When someone writes to you for the first time, their profile fills in on its own with their Instagram name and @username (with no name, the @username is used). If you type the name by hand, Instagram never replaces it. Instagram does not share phone numbers. If Customer care → Channels → Instagram says \"Instagram isn't sharing the name or photo of people who message you\", Meta has not enabled that data yet: new customers arrive without a name and you can fill it in on their profile.",{"id":904,"title":700,"titles":905,"content":906,"level":263},"\u002Fdocs\u002Fchannels\u002Finstagram#customer-photo",[93],"When a customer writes to you, their Instagram profile photo shows up on its own in the conversation, their profile, their tasks and the schedule; we keep a copy because Instagram links expire. Owners and Managers can change or remove it from the customer profile; a photo picked by hand is never replaced automatically. Only your team sees the photo.",{"id":908,"title":781,"titles":909,"content":910,"level":263},"\u002Fdocs\u002Fchannels\u002Finstagram#status-and-pauses",[93],"In Customer care → 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. If you see a notice instead of the connected account when you come back from Instagram: Log in to the panel and connect again: your panel session wasn't open in that browser.The link expired; generate a new one: more than 10 minutes passed or it was already used. Tap Connect Instagram again.This link was generated by another user or project: you started the connection with another panel account or another active project.You cancelled the connection on Instagram: nothing was connected; try again whenever you want. 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":912,"title":913,"titles":914,"content":915,"level":263},"\u002Fdocs\u002Fchannels\u002Finstagram#quick-replies-and-opening-questions","Quick replies and opening questions",[93],"Quick replies appear in the Instagram mobile app. On desktop, or if Instagram rejects the buttons, customers can reply with the option text or number. Confirmation still requires a reply after the summary; buttons preserve the same checks. Opening questions (“Place an order”, “See opening hours”, “Talk to someone”) require activation by support. They follow the business language and active services; businesses with appointments offer booking. There is no editor for these questions in the dashboard yet.",{"id":917,"title":918,"titles":919,"content":920,"level":263},"\u002Fdocs\u002Fchannels\u002Finstagram#catalog-photos-in-instagram-chats","Catalog photos in Instagram chats",[93],"Yes, when product photos are enabled: after the question and in the order summary, it sends one image per option. Names and prices stay in the text, and customers can choose with a quick reply or by typing. If a photo fails to arrive, the order continues as usual. Control this in Customer care → Bot → Personality.",{"id":103,"title":102,"titles":922,"content":923,"level":257},[],"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":925,"title":926,"titles":927,"content":928,"level":263},"\u002Fdocs\u002Fbot\u002Foverview#what-it-can-and-cannot-do","What it can and cannot do",[102],"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":930,"title":931,"titles":932,"content":933,"level":263},"\u002Fdocs\u002Fbot\u002Foverview#configure-the-bot","Configure the bot",[102],"Go to Customer care → 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":935,"title":936,"titles":937,"content":938,"level":263},"\u002Fdocs\u002Fbot\u002Foverview#how-you-sell-and-how-the-bot-takes-orders","How you sell and how the bot takes orders",[102],"In Customer care → Bot → Personality, the How you sell setting tells the bot what to offer first: I sell products (with delivery or a service): it opens with your products and asks for product, quantity and address. Delivery is inferred from the product: it never asks the customer to pick «Delivery».I sell services (that may include products): it opens with your services and asks for day and time.Both: it offers whatever the customer asks for first. The setting only changes the order: to take an order the bot always needs the same things (products and quantities or the service, the address when there is delivery, and whatever the service form asks). It never asks again for what it already knows: the phone comes from the channel, the name and saved addresses from the customer record, and the rest from the message itself. By default it uses the value of the business model you started with or, otherwise, the one implied by your services. When the bot takes an order (this way of taking orders is being rolled out gradually; it is already on in the demo businesses): It understands everything in one message: «send 3 waters to 45 Maple Street» keeps the quantity and the address; if there are two waters it only asks which one, with options. It understands sizes («the 12 L one», «the small one»).The address the customer says wins over the saved one. If they give none, it uses the saved one and names it in the summary. It understands «home» or «work» by the saved address label; if none matches, it asks which one.It suggests, it never fills in: with «the usual» or «same as last time» it shows that order and waits for YES. New customers get no suggestions.Correcting never drops the order: a NO asks what to change (if the address was the saved one, it asks for the new one right away); «make it 3» or «remove the sparkling» are applied and the summary is shown again. Only an explicit cancel drops it.The summary always states the address and the system total; the order is created only after the YES.Product photos: if a product has a photo in the catalog, the bot sends it after the text when it offers products, asks «Which one?» and in the summary (on Telegram and on WhatsApp through the official API; other channels get text only). Up to 4 per message, without repeating the same one within the hour. The text with the options does not change: customers choose by number, name or button as before. Turn it off with Show product photos in the chat, on the same screen.",{"id":940,"title":941,"titles":942,"content":943,"level":263},"\u002Fdocs\u002Fbot\u002Foverview#test-it-in-the-simulator","Test it in the simulator",[102],"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":945,"title":946,"titles":947,"content":948,"level":301},"\u002Fdocs\u002Fbot\u002Foverview#the-inspector","The Inspector",[102,941],"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":950,"title":951,"titles":952,"content":953,"level":263},"\u002Fdocs\u002Fbot\u002Foverview#when-a-person-steps-in","When a person steps in",[102],"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":955,"title":956,"titles":957,"content":958,"level":263},"\u002Fdocs\u002Fbot\u002Foverview#limits-per-channel","Limits per channel",[102],"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":960,"title":961,"titles":962,"content":963,"level":263},"\u002Fdocs\u002Fbot\u002Foverview#how-much-ai-your-business-uses","How much AI your business uses",[102],"In Settings → Plan 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":965,"title":324,"titles":966,"content":967,"level":263},"\u002Fdocs\u002Fbot\u002Foverview#next-steps",[102],"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":969,"title":970,"titles":971,"content":972,"level":263},"\u002Fdocs\u002Fbot\u002Foverview#the-bot-groups-consecutive-messages","The bot groups consecutive messages",[102],"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":107,"title":106,"titles":974,"content":975,"level":257},[],"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 Customer care → 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":977,"title":978,"titles":979,"content":980,"level":263},"\u002Fdocs\u002Fbot\u002Fknowledge#hours-and-address-they-come-from-your-data","Hours and address: they come from your data",[106],"When a customer asks \"where are you?\" or \"what time do you open?\", the bot answers with the business's real data, without making anything up: Address: the one in My business → Details → Address and region.Hours: your agenda's week, combining the active schedules of your team and your resources (My business → Team and resources), in the business's time zone. If you change a schedule, the bot already says the new one. If the knowledge base has an address or hours text, it does not override that data: it only adds details, such as \"parking on the corner\". If the text says something else, your data wins. With no address set or no active schedules, the bot answers with what the knowledge base has or hands over to the team.",{"id":982,"title":983,"titles":984,"content":985,"level":263},"\u002Fdocs\u002Fbot\u002Fknowledge#add-knowledge-by-hand","Add knowledge by hand",[106],"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":987,"title":988,"titles":989,"content":990,"level":263},"\u002Fdocs\u002Fbot\u002Fknowledge#sources-what-updates-itself","Sources: what updates itself",[106],"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":992,"title":993,"titles":994,"content":995,"level":301},"\u002Fdocs\u002Fbot\u002Fknowledge#a-web-page","A web page",[106,988],"Add source → Web page, scope Page.Enter the public URL (for example, your pricing page).The page text is read, without running JavaScript.",{"id":997,"title":998,"titles":999,"content":1000,"level":301},"\u002Fdocs\u002Fbot\u002Fknowledge#a-section-of-your-site","A section of your site",[106,988],"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":1002,"title":1003,"titles":1004,"content":1005,"level":301},"\u002Fdocs\u002Fbot\u002Fknowledge#a-listing-spreadsheet-csv-json-or-rss","A listing: spreadsheet, CSV, JSON or RSS",[106,988],"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":1007,"title":1008,"titles":1009,"content":1010,"level":263},"\u002Fdocs\u002Fbot\u002Fknowledge#if-something-goes-wrong","If something goes wrong",[106],"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":116,"title":115,"titles":1012,"content":1013,"level":257},[],"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":1015,"title":1016,"titles":1017,"content":1018,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#today-inbox-and-work","Today, Inbox and Work",[115],"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":1020,"title":1021,"titles":1022,"content":1023,"level":301},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#work-set-form","Work: set × form",[115,1016],"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 you work at your customers’ places (home services, coverage zones or tasks away from your location). See Map and addressesTimelineIf there are active resources: one row per person or resource and one bar per task across the days \"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. Set and status are two compact menus with their counts; on iPad and desktop they share one line with Filters, sorting and layout icons. On mobile, open View to choose a layout by its icon. Clear the status with its ×; it does not repeat as a filter chip. Other filters appear below. Available statuses come from your flows, even without tasks: “Not delivered” needs a delivery workflow; a queue served at your own location does not enable it.",{"id":1025,"title":1026,"titles":1027,"content":1028,"level":301},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#view-group-and-sort","View: group and sort",[115,1016],"Today and the Work list share the View selector: Group by (Moment —Now, In progress, Later and Completed, Today's default—, resource, service, customer, stage, status, zone, tag, priority or day) and Sort by (time, due date, priority or creation, ascending or descending). Only groupings that make sense for your business appear: without zones there is no Zone, and without stages there is no Stage. Your choice stays in the link and is remembered per person and per view. Empty groups are hidden and completed tasks stay collapsed. In the Calendar the grouping is by resource: with By you pick all, a type, a group or one resource.",{"id":1030,"title":1031,"titles":1032,"content":1033,"level":301},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#saved-views","Saved views",[115,1016],"A view is a named Work combination: set, form, filters, sort and grouping (for example, «Downtown deliveries»). Tap Views next to the title and choose Save current view…. The menu shows Default view, My views and Team views (a section with no views doesn't appear). Criteria are saved, not tasks: the view always shows current work. Personal by default. Owners and managers can share a view with the team: everyone who sees Work sees it. Others use and tweak it, but their changes stay with them; Save as mine copies it to their own views.The last one is remembered. Work opens on the last view you used in each business (on that device). A direct link wins; with nothing remembered it opens the one an Owner or Manager marked as the team default when saving it, and otherwise the default view.Unsaved changes. If you change a filter, the sort or the form, the view shows as modified until you choose Save, Save as new or Discard. The link (?view=…) includes your tweaks.Limits: 10 personal views per person and 10 team views per business. A deleted view, or one you no longer have access to, opens the default view, with no error.",{"id":1035,"title":1036,"titles":1037,"content":1038,"level":301},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#timeline-by-resource","Timeline by resource",[115,1016],"The Timeline shows one row per person or resource (court, vehicle, room…) and one bar per task across the days. It shows gaps and full days at a glance, especially with long jobs or rentals. Zoom: In Work → Timeline, use −\u002F+ or the slider to move from weeks to hours. Day and Week are shortcuts; Now returns to today at a comfortable zoom. Ctrl\u002F⌘ + wheel, pinch and +\u002F− keys keep the instant under the pointer. Zoom is remembered and saved with the view.Occupancy: each row shows the occupied percentage of the week over its working hours; from 85% it says «almost full» and from 100%, «full».Move and stretch: drag a bar to another time, day or row to reschedule or reassign it, or stretch its right edge to change the duration. You can also select the bar and use the buttons (or the keyboard arrows). Moving asks for confirmation with «Notify the customer»; stretching saves right away. Fiuit validates the change with the usual rules: if it doesn't fit, the bar goes back and the notice explains why. Who can move is the same as who can reschedule: Owner and Manager any task; the team their own, and only to their own schedules. On a phone the timeline scrolls sideways and you move with the buttons.",{"id":1040,"title":1041,"titles":1042,"content":1043,"level":301},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#attention-on-demand","Attention on demand",[115,1016],"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":1045,"title":1046,"titles":1047,"content":1048,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#the-task-and-its-stages","The task and its stages",[115],"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":1050,"title":1051,"titles":1052,"content":1053,"level":301},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#forms-per-service","Forms per service",[115,1046],"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":1055,"title":1056,"titles":1057,"content":1058,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#customer-message-on-entering-a-stage","Customer message on entering a stage",[115],"Each stage can send the customer a message when the task reaches it. In My business → Stages, when you edit a stage, Customer message on entry shows the template's text and lets you write your own, per customer language (Portuguese, Spanish or English). Data filled in automatically: name, greeting, service, business, date and time, amount due and tracking link are buttons. Fiuit puts in the real value with its own format; you can't change them or invent others, and the server rejects anything that doesn't exist or is misspelled.Preview with sample data, and Back to the original text to discard yours.If something is missing, the usual text goes out: a customer whose language you didn't write, or a detail that doesn't exist for that task (customer without a name, no amount), gets the template's text, never one with holes.Each task with its own version: the text already about to be sent is the one from the flow version the task entered the stage with. Editing later doesn't change it.What is sent is always the saved text: the AI doesn't write or change it when sending. Wagy can propose the text: you see before and after and nothing is saved until you confirm.Only the Owner saves changes; the Manager can see them. Notices respect quiet hours and the project's notice switches.",{"id":1060,"title":1061,"titles":1062,"content":1063,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#next-step","Next step",[115],"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); tap any of them to open that exit's sheet right on that 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. The same applies to steps without a sheet and to tools (Come back later, Share tracking…): if the connection drops or the server does not answer, tapping the same button again retries the same action without repeating it. If you change the submission (another exit, another tool, other data or another task), cancel the sheet or a final answer arrives, the next attempt is a new action. It is the same command and the same protection the API and MCP use, with no new permissions.",{"id":1065,"title":1066,"titles":1067,"content":1068,"level":301},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#payment-rules","Payment rules",[115,1061],"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":1070,"title":1071,"titles":1072,"content":1073,"level":301},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#stage-tools","Stage tools",[115,1061],"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":1075,"title":1076,"titles":1077,"content":1078,"level":301},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#unassigned-tasks-and-queues","Unassigned tasks and queues",[115,1061],"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 team 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":1080,"title":1081,"titles":1082,"content":1083,"level":301},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#each-service-with-its-stages","Each service with its stages",[115,1061],"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":1085,"title":1086,"titles":1087,"content":1088,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#message-the-customer-from-the-task","Message the customer from the task",[115],"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":1090,"title":1091,"titles":1092,"content":1093,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#work-evidence","Work evidence",[115],"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. When a stage asks for a photo as evidence, it's taken with the camera or picked from the gallery with the same photo editor used across the panel: no cropping needed (it stays whole, with the longer side up to 1600 px), it's shrunk before uploading and saved without the phone's location. If the connection drops, Try again sends it again without duplicating it. The signature is still drawn with a finger or attached as a PNG.",{"id":1095,"title":1096,"titles":1097,"content":1098,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#what-each-role-sees","What each role sees",[115],"RoleTodayWorkCustomersOwner and ManagerThe whole businessEverythingYesTeamTheir own and what they can takeTheir own and what they can takeNoViewerView onlyView onlyNo More in Roles and permissions.",{"id":1100,"title":1101,"titles":1102,"content":1103,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#late-tasks","Late tasks",[115],"A task is late when it has a scheduled time, its window plus a grace period has passed, and it is still not closed: for example, it is still Scheduled or On the way when it should already be done. The grace period is 15 minutes by default and you can change it (0 to 240 minutes) in My business → Details. Tasks without a time, queue tasks and tasks waiting to be scheduled are never late: Fiuit does not invent a time.A closed task (completed, cancelled, no-show or failed) is not late, even if it closed late.The mark clears itself: when the task moves to another stage or is rescheduled it stops being late. If you reschedule it and it runs over again, that is a new delay. Where you see it. The Late badge on the card, the detail and the calendar; the Late filter in Work → View; and as the first reason in Needs your attention on Today (each task counts once, even with several reasons). Who gets notified. The task's assignee and the Owner and Managers, once per task and window. It reaches the bell, as a push and on Telegram if you linked yours; you pick the channels in My account → Notices («Late task»). Automate it. In Customer care → Automatic messages, the a task becomes late trigger fires at that same moment; use it, for example, to message the customer «We are running a little late…». See Rules.",{"id":1105,"title":1106,"titles":1107,"content":1108,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#automate-the-work","Automate the work",[115],"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 Rules. 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":1110,"title":1111,"titles":1112,"content":1113,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#today-by-role","Today by role",[115],"What you do shapes Today. If you run an agenda or a route, your current task sits on top: collapsed by default, with View details to open contact info, what to bring, notes and payment. If you leave it open, the next one opens too until you collapse it. Owners and Managers also see How are we doing?: occupancy today and this week, sales this month against last month at the same point, what is left to collect, completed this week and new customers this month; money cards only with Finance permission. «At the same point» compares whole days (today counts in full).",{"id":1115,"title":1116,"titles":1117,"content":1118,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#reschedule-a-task-with-a-plan","Reschedule a task with a plan",[115],"Rescheduling a task covered by a package or club preserves the amount agreed before the plan. Removing the plan later restores that amount; so does moving outside its coverage. Coverage still depends on validity, remaining units and quotas. If you already chose Remove plan, the replacement stays outside the plan: changing the time does not undo that choice, even after several reschedules. Check the amount in Work, in the task’s Payment section.",{"id":1120,"title":1121,"titles":1122,"content":1123,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#quick-view-in-map-and-calendar","Quick view in Map and Calendar",[115],"In Work → Map, hover over or focus a marker; on your phone, tap it. In Calendar, tap a task to see its summary while keeping your work in view. Use Start, On the way, or another available exit that needs no data. Other simple exits have their own buttons.More actions offers rescheduling, cancellation with confirmation, and sharing tracking when your permissions and the task allow them.For forms, evidence, payments, editing, reopening, scheduling, or changing an order, choose Open task: the full detail keeps all actions. If an exit needs new data when executed, the task also opens.The card shows no amounts; customer and address follow your permissions. With no actions, the section disappears. On phones it opens as a bottom sheet; Escape or tapping outside closes it and returns focus to the marker or event.",{"id":1125,"title":1126,"titles":1127,"content":1128,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#how-do-i-zoom-the-timeline-and-open-a-task","How do I zoom the timeline and open a task?",[115],"In Work → Timeline, use −\u002F+ or the slider to move from weeks to hours. Day and Week are shortcuts; Now returns to today at a comfortable zoom. Ctrl\u002F⌘ + wheel, pinch and +\u002F− keys keep the instant under the pointer. Zoom is remembered and saved with the view. Each bar shows more information as its width grows: color only, time, time and task, or also customer\u002Fassignee and status. Tap to open the quick view; when several tiny bars sit together, choose one from the list. Dragging moves by 15 minutes up close, one hour in between or one day far out, preserving the original time. On a phone, move with the buttons after closing the quick view. The list of nearby tasks opens beside the tapped area, or as a bottom sheet on mobile. Duration changes use 30-minute steps up close and one-hour steps when zoomed out. Date arrows move one week up close and five weeks when zoomed out. Rescheduling clears the selection of the previous time.",{"id":1130,"title":1131,"titles":1132,"content":1133,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#what-still-takes-its-place","What still takes its place",[115],"In Work → Calendar and Work → Timeline, a started task that was not completed on its day shows striped as Still occupying on the following days. It takes the whole opening hours of each day until you complete it, at most 7 days after its end, and the block says until which day. In a place that serves several at a time it says how many it takes, for example «1 of 3 places». It applies to the place, courts and full-day services, not to a time slot with a person. The block does not drag: tap it to see the task and complete it. After the 7 days the place is freed and the task stays in Late until you close it.",{"id":1135,"title":1136,"titles":1137,"content":1138,"level":263},"\u002Fdocs\u002Fwork\u002Ftasks-and-actions#standing-bookings-reservations-that-repeat","Standing bookings: reservations that repeat",[115],"For a regular customer («every Tuesday at 8 pm») use New task → Repeat; owners and managers can see and create them. Choose the customer, service and first time, tick Repeat and set the days, how many weeks apart (1 to 4) and when it ends: on a date (up to a year) or after a number of times (up to 52). You need an existing customer and a service with a schedule, with no form of its own and no duration different from the service's. Before creating it, the preview shows the next 8 weeks with every date; those that clash with your schedule (closed, no room, holiday) show their reason and you skip them one by one. With any left unresolved it can't be created. The remaining dates are added automatically over time, and those that clash later are not created and stay marked in the series. Each date is a regular task, with its notice, its stages, its charge on the day and its no-show, and shows the Standing booking mark in Today, Work and the calendar. Open the task to see the rule and tap Edit standing booking or Cancel standing booking: you choose only this one (rescheduled or cancelled like any task), this and the following (splits the series in two) or the whole series. What changes or is cancelled are the upcoming dates that have not started or been charged; past, charged or no-show dates are not touched, and the customer isn't notified about those dates: let them know once. A no-show does not cancel the series.",{"id":120,"title":119,"titles":1140,"content":1141,"level":257},[],"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":1143,"title":1144,"titles":1145,"content":1146,"level":263},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#the-map-view","The Map view",[119],"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.Hover over or focus a marker to see its summary; on your phone, tap it. Open task takes you to the full detail.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":1148,"title":1149,"titles":1150,"content":1151,"level":301},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#light-and-dark-mode","Light and dark mode",[119,1144],"A floating selector has three options: Automatic, Light and Dark. Automatic follows your panel's theme. It is remembered per browser.",{"id":1153,"title":1154,"titles":1155,"content":1156,"level":263},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#address-autocomplete","Address autocomplete",[119],"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":1158,"title":1159,"titles":1160,"content":1161,"level":263},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#customer-addresses","Customer addresses",[119],"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.When the service is remote, the task has no address: neither the business address nor the customer address, and it does not appear on the map. Its detail shows Remote and, if you added the meeting link to the service, a button to open it.The bot offers only authorized addresses and confirms which one to use before booking.Each address has its zone. If you use zones, the profile shows it next to the address (“Home · North Zone”): it is calculated from your zones' areas, or you pick it manually in Edit → Zone (Owner and Manager). A new task with that address uses that zone without recalculating it. When you create or change a zone, addresses with an automatic zone are recalculated; manually chosen ones never change.",{"id":1163,"title":1164,"titles":1165,"content":1166,"level":263},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#location-shared-by-the-customer","Location shared by the customer",[119],"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":1168,"title":1169,"titles":1170,"content":1171,"level":263},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#privacy","Privacy",[119],"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":1173,"title":1174,"titles":1175,"content":1176,"level":263},"\u002Fdocs\u002Fwork\u002Fmap-and-addresses#for-whoever-manages-the-account","For whoever manages the account",[119],"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":124,"title":123,"titles":1178,"content":1179,"level":257},[],"What to do automatically when something happens in your business: waits, conditions and alerts. Load examples, activate, pause and review history. A rule 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 reminders. Rules are in Customer care → Automatic messages.",{"id":1181,"title":1182,"titles":1183,"content":1184,"level":263},"\u002Fdocs\u002Fwork\u002Fflows#the-pieces","The pieces",[123],"Trigger: when it starts. Some of the available events: a task is created, assigned, modified, completed or cancelled; its status changes; a task becomes late (its time plus the grace period has passed and it is still open);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 rule has up to 32 steps, with no loops. Rules bypass no permission: every step is validated again by the system, with the role of the Owner or Manager who created the rule. A wait cancels itself if the task is cancelled.",{"id":1186,"title":1187,"titles":1188,"content":1189,"level":263},"\u002Fdocs\u002Fwork\u002Fflows#start-with-examples","Start with examples",[123],"Your industry template comes with example rules. In Rules, 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":1191,"title":1192,"titles":1193,"content":1194,"level":263},"\u002Fdocs\u002Fwork\u002Fflows#view-activate-and-pause","View, activate and pause",[123],"Each rule 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 rule lets you edit the condition: Edit condition, Test this condition and Save as new version. To change an active or more complex rule, ask Wagy, the assistant (Getting started), or use the API. Before activating a rule 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":1196,"title":1197,"titles":1198,"content":1199,"level":263},"\u002Fdocs\u002Fwork\u002Fflows#rules-and-reminders","Rules and reminders",[123],"Simple reminders and confirmations (the other Customer care tab, called Automatic messages) remain the simplest way to send a reminder or a confirmation. A rule that comes from a classic rule is managed there. The rules on this page are for what needs to wait, decide or act on tasks.",{"id":1201,"title":1202,"titles":1203,"content":1204,"level":263},"\u002Fdocs\u002Fwork\u002Fflows#for-developers","For developers",[123],"Rules 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":128,"title":127,"titles":1206,"content":1207,"level":257},[],"How to write a condition in a rule, which data it can look at, ready-made examples by industry and how to test it before activating. A condition decides which branch a rule 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":1209,"title":1210,"titles":1211,"content":1212,"level":263},"\u002Fdocs\u002Fwork\u002Fconditions#how-it-is-written","How it is written",[127],"WhatExampleCompare== (equal), !=, \u003C, \u003C=, >, >=Combine&& (and), || (or), ! (not)Text\"delivery\" in quotesIs in a list\"vip\" in customer.tagsContainsservice.name.contains(\"Haircut\")Starts withtrigger.subject.startsWith(\"Partner\")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 rule and again when you activate it.",{"id":1214,"title":1215,"titles":1216,"content":1217,"level":263},"\u002Fdocs\u002Fwork\u002Fconditions#which-data-it-can-look-at","Which data it can look at",[127],"ObjectWhat it hastriggerThe event that started the rule. 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":1219,"title":1220,"titles":1221,"content":1222,"level":263},"\u002Fdocs\u002Fwork\u002Fconditions#examples","Examples",[127],"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":1224,"title":1225,"titles":1226,"content":1227,"level":263},"\u002Fdocs\u002Fwork\u002Fconditions#test-a-condition","Test a condition",[127],"In a rule'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":1229,"title":1230,"titles":1231,"content":1232,"level":263},"\u002Fdocs\u002Fwork\u002Fconditions#common-errors","Common errors",[127],"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 and startsWith are supportedUnknown 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":132,"title":131,"titles":1234,"content":1235,"level":257},[],"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":1237,"title":1238,"titles":1239,"content":1240,"level":263},"\u002Fdocs\u002Fwork\u002Fzones#create-a-zone","Create a zone",[131],"In My business → Team and resources, tap Add and choose Zone. Each zone has: Name.Area: text and\u002For an area drawn on the map, as explained below.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":1242,"title":1243,"titles":1244,"content":1245,"level":263},"\u002Fdocs\u002Fwork\u002Fzones#define-the-area","Define the area",[131],"You can combine two ways to define a zone's area: By text: add neighborhoods, cities, provinces or states, countries or postal codes as tags. A postal code matches by prefix: 20 covers every code that starts with 20.On the map: draw a polygon or pick a point and a radius around it, for example 3 km. Each way is optional, but you need at least one. A zone with neither text nor a drawn area can never receive tasks, so it cannot be saved.",{"id":1247,"title":1248,"titles":1249,"content":1250,"level":263},"\u002Fdocs\u002Fwork\u002Fzones#how-the-zone-is-assigned","How the zone is assigned",[131],"Each task with an address finds its zone by itself, in this order: By the map: if the address has coordinates and there are zones with drawn areas, it looks for the area that contains that point. If several contain it, the smallest area wins.By text: if no area contains the point, or coordinates or drawn areas are missing, it looks for a postal code match first, then a neighborhood, then a city, ignoring accents and capital letters.No matches: the task stays without a zone and shows up in Today → Needs your attention. Fixing the address automatically runs the zone search again. If the postal code is written inside the address (for example “25 de Mayo 1530, W3230AIZ Corrientes” or “Rua A, 1 - 20520-000”), it counts too; the street number is never taken as a postal code. In Argentina, a zone with W3230 or 3230 covers W3230AIZ. A bare 4 or 5 digit number only counts when it is labeled, like “CP 3230” or “ZIP 10001”. When you create a zone, change its area or deactivate it, open tasks (overdue ones too) look for their zone again, and the message after saving says how many now have a zone. Times are never moved: if a task lands in a zone that does not work that day, it keeps its time and you reschedule it if needed. A task already in another zone only changes if the zone you saved fits it better. In Work you can filter by zone or see only what has no zone, and on the map each task shows its zone.",{"id":1252,"title":1253,"titles":1254,"content":1255,"level":263},"\u002Fdocs\u002Fwork\u002Fzones#for-delivery-businesses","For delivery businesses",[131],"Draw the area and keep a few postal codes or neighborhoods as a fallback. If a badly written address, such as “eso 5”, could not be placed on the map but has a matching postal code or neighborhood, the task still finds its zone by text.",{"id":1257,"title":1220,"titles":1258,"content":1259,"level":263},"\u002Fdocs\u002Fwork\u002Fzones#examples",[131],"A point inside two areas: the address falls inside both North Zone and Center Zone. Since Center Zone has the smaller area, the task gets Center Zone.No coordinates, with a postal code: the address has postal code 20040-020 and North Zone has the tag 20. The task gets North Zone by the prefix.No coordinates or matching text: the address says “eso 5”, with no postal code, neighborhood or city. The task stays without a zone, in Today → Needs your attention.",{"id":1261,"title":1262,"titles":1263,"content":1264,"level":263},"\u002Fdocs\u002Fwork\u002Fzones#coverage","Coverage",[131],"Your coverage is the sum of all your active zones: whatever falls inside a zone you serve; whatever falls outside all of them is out of coverage. If you have not created zones yet, there is no limit (only the business country), as before. Besides neighborhoods, cities and postal codes, a zone's area can be a whole province or state or a country.",{"id":1266,"title":1267,"titles":1268,"content":1269,"level":301},"\u002Fdocs\u002Fwork\u002Fzones#what-happens-with-an-out-of-coverage-order","What happens with an out-of-coverage order",[131,1262],"In Zones, the Coverage card at the top lets you choose: Take it anyway and notify me (the default): the task is created with the fuera-de-cobertura tag and shows up in Today → Needs your attention, so you decide.Do not take it: the bot tells the customer «For now we don't reach that area» and creates nothing.",{"id":1271,"title":1272,"titles":1273,"content":1274,"level":301},"\u002Fdocs\u002Fwork\u002Fzones#deliveries-that-reach-certain-zones","Deliveries that reach certain zones",[131,1262],"Each delivery service has Reaches: all zones (default) or these zones. A delivery that doesn't reach the customer's zone follows the same Coverage setting: with Take it anyway and notify me, the bot offers it and takes the order, and the task gets the fuera-de-cobertura tag, just like an address outside all your zones;with Do not take it, once the customer's address is known the bot doesn't offer it, and if the customer asks for it anyway it replies «That delivery doesn't reach your area yet» and creates nothing. If a detail needed to tell the zone is missing, the bot neither rejects nor hides anything.",{"id":1276,"title":1277,"titles":1278,"content":1279,"level":301},"\u002Fdocs\u002Fwork\u002Fzones#how-the-bot-locates-the-address","How the bot locates the address",[131,1262],"The bot looks the customer's address up inside your coverage, so it does not confuse a street with a namesake in another city. Each neighborhood or city you typed in an area is located once, when you save the zone. A single result inside the coverage that includes the house number: accepted.The street was found but not the number: the bot asks for the number or for the customer to share their location; it does not store an approximate point.The customer names another city («…, Santo Tomé»): the bot searches that city and, if it is outside, applies what you chose for out-of-coverage orders.Several possible results: the bot offers up to 3 numbered options inside your coverage, plus «none», which keeps the address as typed, without a map location. It no longer asks «which city is it in?». When the address is precise, the confirmation includes a Google Maps link, on every channel.",{"id":1281,"title":1282,"titles":1283,"content":1284,"level":301},"\u002Fdocs\u002Fwork\u002Fzones#for-integrations-and-assistants","For integrations and assistants",[131,1262],"API: GET \u002Fv1\u002Fzones\u002Fcoverage (read, key with config:read) and PUT \u002Fv1\u002Fzones\u002Fcoverage with {\"out_of_coverage\": \"take\" | \"reject\"} (Owner and Manager, config:write). The area type also accepts state and country, and a service has reach_zone_ids (empty = all zones), changed with PATCH \u002Fv1\u002Fservices\u002F{id}.MCP: the get_coverage and set_coverage tools. See MCP.Wagy can propose zones with these types and explain your coverage.",{"id":1286,"title":1287,"titles":1288,"content":1289,"level":263},"\u002Fdocs\u002Fwork\u002Fzones#times-and-the-bot","Times and the bot",[131],"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 address and says, for example: \"For your zone (North Zone) we serve Tuesday or Thursday\".",{"id":1291,"title":1292,"titles":1293,"content":1294,"level":263},"\u002Fdocs\u002Fwork\u002Fzones#unclaimed-tasks","Unclaimed tasks",[131],"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. In Work teams, each team shows the zones served by its members and who covers each one. The relation comes from people shared by the team and zone. Zones without work-team members are also managed in this section.",{"id":136,"title":135,"titles":1296,"content":1297,"level":257},[],"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":1299,"title":1300,"titles":1301,"content":1302,"level":263},"\u002Fdocs\u002Fwork\u002Ftracking-portal#the-bot-sends-it-for-you","The bot sends it for you",[135],"When the bot confirms an order, or the customer asks how it is going, the message ends with the customer's link and opens that order directly. It is the same link as Share: if the customer had none, the bot creates one (no balance, 90 days); if they had one, it reuses it and keeps it valid for 30 more days, up to 90 days from when it was created; after that it sends a new one and the old one stops working. If you revoked it, the bot does not create another: the message goes out without a link until you share it again. On your site's chat (WebChat) the bot does not send the link yet. On WhatsApp, \"Confirm\", \"Reschedule\", \"Cancel\" and \"Order again\" open the chat with the message written. On Telegram, Instagram or your site's chat, the page copies the message and the customer pastes it. Cancelling is never blocked.",{"id":1304,"title":1305,"titles":1306,"content":1307,"level":263},"\u002Fdocs\u002Fwork\u002Ftracking-portal#share-the-link","Share the link",[135],"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; Team and Viewer do not see the button.",{"id":1309,"title":1310,"titles":1311,"content":1312,"level":263},"\u002Fdocs\u002Fwork\u002Ftracking-portal#what-the-customer-sees","What the customer sees",[135],"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.Order detailOrder code, products with quantity and amount, total, delivery address (only while open) and the day with the time window or exact time. The map only shows while the order is on its way.Order actionsAdd to calendar (Google Calendar or an .ics file), Confirm (only if you asked them to reconfirm attendance and they have not replied yet; it goes through the same chat), Reschedule (if it has a time), Cancel and Order again (open your chat with the message ready). Anything that does not apply is hidden.Contact (once, at the top)Your address (the one in Settings), Call if you added your phone and Send message (your first connected channel; if there is none, WhatsApp to your phone). Without any of these, the block is hidden.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 or email (the customer's or your team's), the address of closed orders, notes, team comments or activity, driver, costs or other customers' data.",{"id":1314,"title":1315,"titles":1316,"content":1317,"level":263},"\u002Fdocs\u002Fwork\u002Ftracking-portal#security-and-privacy","Security and privacy",[135],"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":140,"title":139,"titles":1319,"content":1320,"level":257},[],"Connect the business's Mercado Pago account, see which payment methods are available and set each service's deposit. Payments are set up in Finance → Charges. Only the Owner and the Manager see this tab; the rest of the team does not.",{"id":1322,"title":1323,"titles":1324,"content":1325,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#connect-the-account","Connect the account",[139],"Brazil and Argentina: tap Connect Mercado Pago and authorize Fiuit in Mercado Pago. You come back to the tab with the account connected.Other supported countries (Chile, Uruguay, Colombia, Mexico and Peru): if Fiuit enabled it for your country, you paste the account token and Fiuit validates it. Fiuit never shows the token. Until it is enabled, the card says it is not available yet and payments are recorded by hand; an account connected earlier stays visible and can be disconnected, but the token cannot be pasted again.Paraguay and currencies without Mercado Pago do not have this option: payments are recorded by hand. The tab shows the connection status, the account number, country, currency, whether it is a test or production account and when the authorization expires. If it expires or fails, Reauthorize appears: you reauthorize without disconnecting and without losing payments. Disconnect asks for confirmation. Before cancelling open payments, Fiuit checks their status in Mercado Pago, and keeps the encrypted credential for 30 days to reconcile late payments.",{"id":1327,"title":1328,"titles":1329,"content":1330,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#country-and-currency","Country and currency",[139],"The account must collect in the same country and currency as the project. If they do not match (for example, the project uses reais and the account is from Argentina), the tab explains it and Fiuit does not create payment links: payments stay manual until you connect the right account or fix the currency in My business → Details.",{"id":1332,"title":1333,"titles":1334,"content":1335,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#payment-methods","Payment methods",[139],"Methods are not switched on by hand: they follow the account. Each one says whether it is available or what is missing. Payment link: with a production account from Brazil or Argentina connected. In Brazil the customer can pay with Pix inside the same link.A test account does not charge real customers.In-store QR and card in the panel are not available yet.",{"id":1337,"title":1338,"titles":1339,"content":1340,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#deposit","Deposit",[139],"The deposit is set per service and edited in the tab's Deposit section: amount and, optionally, Refund the deposit when cancelled in advance (between 1 and 2160 hours). When a customer books a service with a deposit, the slot is held for a few minutes while they pay. The link expires a bit earlier so Fiuit can confirm the payment; if they do not pay in time, the slot is released.By default the deposit is kept when the customer cancels. With the refund on, Fiuit asks Mercado Pago for the refund when the customer cancels at least that many hours ahead.Without a connected account, the deposit is marked as paid by hand on the task.",{"id":1342,"title":1343,"titles":1344,"content":1345,"level":301},"\u002Fdocs\u002Fwork\u002Fpayments#charge-when-booking-nothing-deposit-or-full-amount","Charge when booking: nothing, deposit or full amount",[139,1338],"On the sheet of each service with appointments (Services), Charge when booking chooses what is charged on confirmation: Don't charge, Deposit or Full amount. With Full amount, the customer pays the task's full value (price, form or products, depending on how the service charges) through the same flow as the deposit: the booking waits for the payment, is confirmed once it clears, the slot is released if they don't pay in time, and it is refunded according to the cancellation window. A court, for example, is paid in full when booked. In Finance → Charges you see what each service charges. Without Mercado Pago connected, you collect by hand from the task.",{"id":1347,"title":1348,"titles":1349,"content":1350,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#charge-with-link","Charge with link",[139],"In the Payment section of a task with a balance you see Charge with link; also on a conversation’s linked tasks, in the Inbox. Send in the conversation: Fiuit creates a Mercado Pago link for what is left to pay and sends it to the customer in their conversation (WhatsApp, web chat or Telegram), with a fixed message that includes the amount and the expiry.Copy link: copies it so you can share it another way.Fiuit calculates the amount (the task balance: price minus what was already collected, deposit included). To charge only a part, use Charge a part; to change the total, adjust the amount due.An open link for the same amount is reused: no second link is created for the same thing. With an open link for another amount, wait for it to expire or record the payment by hand.The link expires after 48 hours. The task history shows whether it is pending, paid or expired, and you can copy or resend it. When the customer pays, the payment shows up automatically and the balance goes down.The Owner and the Manager use it; the team too, on their own tasks, when The courier can collect payments is on. It only shows with a production account from Brazil or Argentina connected.",{"id":1352,"title":1353,"titles":1354,"content":1355,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#charge-with-qr","Charge with QR",[139],"To get paid on the spot, at the door or at the counter, the Payment section of a task with a balance shows Charge with QR. A full-screen Mercado Pago QR code opens with the amount in large type. The customer scans it with the Mercado Pago app or their bank app and, once they pay, the screen shows Paid! and the payment is recorded on the task.Fiuit calculates the amount, as with the link: the task balance.The QR code expires after 15 minutes. You can cancel it or create another one; if you close it without charging and open it again, the same one comes back.There are never two open payment methods at once: if a link was open, requesting the QR voids it, and no link is created while a QR code is open.Besides a Brazil or Argentina production account, Mercado Pago needs the business address with its map location (set in My business → Details). Without it, Finance → Charges shows QR as unavailable and explains why.The same people who can charge with a link can use it.",{"id":1357,"title":1358,"titles":1359,"content":1360,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#charge-with-point","Charge with Point",[139],"If the business has a Mercado Pago Point Smart terminal, it can collect from the task without typing the amount on the terminal. Link the terminal in Finance → Charges → Point terminal: your Mercado Pago account's terminals are listed; pick one and tap Use this terminal. Mercado Pago switches it to integration mode to receive Fiuit charges.The Payment section of a task with a balance shows Charge with Point. Fiuit sends what is still owed to the terminal and the customer pays there by card, QR or Pix.The screen shows the status and says Paid! only once Mercado Pago confirms the payment; then the payment is recorded on the task.The charge expires after 15 minutes. If the card is declined, you can send it again; you can also cancel it. If the customer was already paying and the payment still arrives, it is left for the team to review.There are never two open payment methods at once: charging with Point voids the task's open link or QR, and vice versa.While a charge is open on the terminal, it cannot be changed or unlinked. The same people who can charge with a link can use it; linking the terminal is for the Owner and Manager. Available with a Brazil or Argentina production account.",{"id":1362,"title":1363,"titles":1364,"content":1365,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#charge-a-part","Charge a part",[139],"To split a payment (a court paid by four players, someone paying with two cards), the Payment section of a task with a balance has Charge a part. Enter the amount of the part and choose the usual method: link, QR, Point or manual. Repeat it as many times as you need: each part is its own payment with a fixed amount, and a part link can be copied or sent separately.Several parts can be open at once, but all open payments together never go over the balance. If a part does not fit, the panel tells you how much is left to cover and how much is already in open parts.Charge with link, QR or Point without an amount only charge what is left without a part. Parts do not void each other, nor are they voided by the link the bot sends or by a QR or Point for the rest.In the task history each part has the Part label, with its amount, method and status; any open payment (a part or the link, QR or Point for the balance) can be voided and the others stay. If a link for the whole balance is open, Charge a part explains it and offers to void it right there.When the last part comes in, the task is paid and stages waiting for payment move on as usual. If the total goes down and an open part no longer fits, that part is voided and the notice stays on the task. If someone pays too much (two people pay the same part), the extra stays in the customer's favor. The customer who booked is still responsible: whatever is not paid stays as their debt.The same people as the link can use it. Charging by card also charges only what is left without a part and does not void the parts.",{"id":1367,"title":1368,"titles":1369,"content":1370,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#latest-payments","Latest payments",[139],"The list shows the latest Mercado Pago payments (deposit, amount, status and date), newest first. Tap Open to see the task: refunds and reviews are done from there. Without an account or payments, the list does not appear.",{"id":1372,"title":1373,"titles":1374,"content":1375,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#charge-a-card","Charge a card",[139],"When the customer is in the shop or on the phone and cannot scan a QR or open a link, the Owner and the Manager can tap Card in the Payment section of a task with a balance. It is an assisted charge: the panel reminds you every time. Mercado Pago's secure form opens for what is left to pay. Enter the details as the customer reads them to you and do not write them down: the fields belong to Mercado Pago and Fiuit never receives or stores the card details.Mercado Pago approves or declines on the spot. If it declines, you see the reason and can try another card. If it does not answer, the charge stays checking and you cannot charge again until the result is known.Fiuit calculates the amount (the task balance). If the balance changed while the card was being entered, nothing is charged: open it again.Charging a card voids the task's open link or QR. The same submission never charges twice.With a Mercado Pago test account it works with test cards; those charges do not count toward the balance.Staff do not use it, and there is no API key, MCP or Wagy to charge cards: it needs the panel open in a browser.",{"id":1377,"title":1378,"titles":1379,"content":1380,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#with-wagy-the-api-and-mcp","With Wagy, the API and MCP",[139],"Wagy can tell you the account status, which methods are available and why, and the latest payments; it does not connect accounts or ask for tokens. Through the API and MCP, a key with the payments:read permission reads the same (GET \u002Fv1\u002Fpayments\u002Faccounts\u002Fmercadopago and GET \u002Fv1\u002Fpayments\u002Faccounts\u002Fmercadopago\u002Fcharges).",{"id":1382,"title":1383,"titles":1384,"content":1385,"level":263},"\u002Fdocs\u002Fwork\u002Fpayments#payment-details-without-mercado-pago","Payment details without Mercado Pago",[139],"In Finance → Charges → Chat payment, the Owner or the Manager enters their payment details (bank transfer, Pix or instructions), one text per language. If chat payment is set to «Ask how to pay» and Mercado Pago isn't ready, the bot shows the customer those details as written with the order total and offers «I paid» or «On delivery». «I paid» only alerts the team («Customer says they paid», once per order): you check the money came in and record the payment on the task. A payment is never recorded by itself. Wagy changes them with a plan you confirm; through MCP, configure_pay_info with the settings:write permission.",{"id":144,"title":143,"titles":1387,"content":1388,"level":257},[],"The path each task follows: stages, details, buttons and notices. How to build a flow, share it across services and let the bot ask for what is missing. A flow is the path a task follows: its stages (for example Booked → In the chair → Done), the details filled in at each one, the buttons that move it and the notices to the customer or the team. What you sell lives in the catalog (services, products and plans); each service picks a flow, and several services can share the same one. Each task copies its service's flow when it is created and moves through its stages. Not to be confused with Rules, which do things on their own when something happens. Every service, product or plan shows Stages: … flow · Change: there you see which flow its tasks follow, change it and edit it. The full list is in My business → Stages. Owners and Managers can see them; editing is for the Owner.",{"id":1390,"title":1391,"titles":1392,"content":1393,"level":263},"\u002Fdocs\u002Fwork\u002Fservice-flows#build-a-flow","Build a flow",[143],"In My business → Stages, tap New flow (it starts from the system flow of the mode you choose, or your copy if you edited it) or open one and tap Duplicate: the copy is independent.Add or rename stages with + Add stage. The Timing says where each one falls: Before service, In service or Final.In each stage, + Add data (text, number, yes\u002Fno, options, date, photo, signature, checklist…) and choose Visible to: Team, Customer or Both.Add button to another stage to set how the task moves on: the destination, who taps it and which details it requires.Try it with ▶ Test flow (see Test a flow) and tap Save.",{"id":1395,"title":1396,"titles":1397,"content":1398,"level":263},"\u002Fdocs\u002Fwork\u002Fservice-flows#edit-the-system-flow","Edit the system flow",[143],"Fiuit comes with three system flows: Service flow, Order flow and Subscription flow. To change one, tap Edit stages on the service (or Edit on the flow): you edit your business's copy, which every service that used the original and new services of that mode use. Back to original returns those services to the system flow. Open tasks do not move: they finish with the stages they had. Your copy is not deleted: it stays as “(previous)”, labeled Unused, in case you want it back.A flow no service uses shows as Unused in Stages and can be deleted if it never had tasks; if it did, deactivate it.",{"id":1400,"title":1401,"titles":1402,"content":1403,"level":263},"\u002Fdocs\u002Fwork\u002Fservice-flows#each-stages-assignee","Each stage's assignee",[143],"Each stage can have an assignee: in + Add → Automatic → Stage assignee you choose one person or a team. With no assignee, the stage keeps the same as before (that is how all your existing flows stay). For example, in a repair shop: Check-in → «Front desk» team; Diagnosis and Repair → «Mechanics» team; Ready for pickup → «Front desk». Person: on entering the stage, the task goes to that person.Team: it is assigned the way the team shares work (rotating, least busy or fixed); if whoever had it is already on the team, they keep it. For tasks without a schedule, a team that shares work with «whoever takes it» leaves the task with the team until someone takes it.Scheduled appointments: the time never moves. If the new assignee has no room in their schedule, the task stays with whoever had it and the owner and managers get a Review assignment notice. The same if the team or person no longer exists or is inactive: the task never gets stuck.Notices and views: the new assignee gets the assigned-task notice on their channel (panel, Telegram or team WhatsApp) and sees it in «My tasks», their assigned views and Focus. There are no new permissions: the team sees what it saw before and the owner and managers see everything.History: the task records it («Went to Mechanics on entering Diagnosis»).▶ Test flow shows in «What would happen» who gets the task at each stage.",{"id":1405,"title":1406,"titles":1407,"content":1408,"level":263},"\u002Fdocs\u002Fwork\u002Fservice-flows#one-flow-for-several-services","One flow for several services",[143],"In the service, Edit → Stages → Change shows the flow it uses and lets you pick another one of the same mode. If haircuts and haircut + beard are handled the same way, give them the same flow: you build it once and it changes for all of them. Picking another flow for a service only changes new tasks; open ones keep theirs.Saving a shared flow publishes a new version for all its services. Before you confirm, you see which services use it and how many open tasks move in each one.",{"id":1410,"title":1411,"titles":1412,"content":1413,"level":263},"\u002Fdocs\u002Fwork\u002Fservice-flows#the-bot-asks-the-customer-for-what-is-missing","The bot asks the customer for what is missing",[143],"If a task's stage has details or buttons seen by the Customer, and the task was created in the chat, the bot asks for them in the same conversation, one at a time, and moves the task once they are complete. For example, a \"Reference photo\" stage: the customer books a haircut, the bot asks for the photo, saves it to the task and moves it to the next stage. The team sees it in Today and charges it as usual. If the customer asks something else halfway, the bot answers and then comes back: \"Shall we continue with your …?\".The bot never taps team buttons, never charges or sets amounts, and never cancels without a YES from the customer.24 hours after the task entered the stage, the bot stops asking and the team takes over.On a text detail the customer answers, you can turn on Keep the customer's audio: if they answer with a voice note on WhatsApp or Telegram, the audio is kept on the task (with a player and what they said below) and is deleted with the task or when the customer is deleted. If you don't turn it on, the audio is transcribed and discarded.The photo is requested on WhatsApp, Instagram and Telegram. On the website chat, the bot says that detail is completed with the team. The signature is always completed with the team.",{"id":1415,"title":1416,"titles":1417,"content":1418,"level":263},"\u002Fdocs\u002Fwork\u002Fservice-flows#wagy-and-flows","Wagy and flows",[143],"Ask Wagy \"which flow does the haircut use?\" or \"what steps does the color flow have?\": it shows the stages and which services use it. It can also assign a flow to one or more services, rename one of your flows, add, remove or move stages and choose a stage's assignee (\"have the Mechanics team take Diagnosis\"), always with a plan you confirm. Creating flows and editing details, buttons or notices is done in the panel.",{"id":1420,"title":1202,"titles":1421,"content":1422,"level":263},"\u002Fdocs\u002Fwork\u002Fservice-flows#for-developers",[143],"Flows are read and published through the API (\u002Fv1\u002Fflows) and MCP (list_flows, get_flow); a service's flow is its flow_id. Each stage's assignee is on_enter.route (resource or group). It can also be written as assignee on the stage ({\"resource\": id}, {\"group\": id} or null). See Endpoints.",{"id":1424,"title":1425,"titles":1426,"content":1427,"level":263},"\u002Fdocs\u002Fwork\u002Fservice-flows#closures-by-reason","Closures by reason",[143],"Set reasons in My business → Stages. When closing, choose one or Other with an explanation. Cancellation allows omitting it. Results shows counts by flow, exit and reason.",{"id":148,"title":147,"titles":1429,"content":1430,"level":257},[],"Add an expense in three taps from Finance, see money in and out in one list and approve what your team records. Expenses and the Transactions list live in Finance. What you record adds to what went out in the period; what you collect, to what came in.",{"id":1432,"title":1433,"titles":1434,"content":1435,"level":263},"\u002Fdocs\u002Fwork\u002Fexpenses#the-four-tabs-of-finance","The four tabs of Finance",[147],"Home: at the top, Left in large type with In and Out for the period below it; you pick Today, Week or Month. The chart shows the two previous periods, the current one (to date) and the next. Each period has what is already done, what is still confirmed (the fixed expenses falling due) and what is expected (the balance not paid yet, the estimated team commission and the expenses awaiting approval). Tap a period and the figures at the top change. What is expected is only a sum of dated things: it does not estimate new sales or promise anything. If nothing is scheduled for the next period, it does not appear. Below are To collect and Overdue (more than 30 days), which hide when they are zero.Transactions: one table with money in and out, with the In, Out and Left totals for the filter. On a phone it is a compact list.Cash register: each team member's cash box, with the cash they collected, what they handed over and their daily closing. It is the same Cash register report in Reports, one tap away.Reports: a selector with every report: Income statement, Cash flow, Sales by month, Team commissions, Payments received, Cash register, To collect, the reports by customer, hour, zone and channel, Attention and busy hours and the Accountant package. Each report has its own link and its Export button.",{"id":1437,"title":1438,"titles":1439,"content":1440,"level":263},"\u002Fdocs\u002Fwork\u002Fexpenses#add-an-expense","Add an expense",[147],"On any Finance screen tap + Expense: Type the amount (the number keypad opens by itself). Guaraníes and Chilean pesos have no decimals.If you want, type one or more tags (for example «van» or «downtown store»). A tag you already used fills in the category for you.Tap a category (if the tag didn't fill it in, or to change it): the 4 you use most and the last one you picked are on top; the rest are under Others.Tap Save. Optional: Receipt photo (photo or PDF). Under More details you pick the date (today by default; never a future one), the resource (without one it is General), the service, how it was paid, who it was paid to and a note. After saving you can tap Repeat every month (the same expense is recorded automatically on the same day every month, starting next month) or Add another, which keeps the last category and resource selected. Offline, what you type is kept as a draft on that device and comes back when you open + Expense again; it is only recorded once there is a connection and you tap Save. The same draft is never recorded twice.",{"id":1442,"title":1443,"titles":1444,"content":1445,"level":263},"\u002Fdocs\u002Fwork\u002Fexpenses#tags","Tags",[147],"Categories are fixed (they can't be renamed): the Income statement and the Cash flow come from them. To organize your expenses your way, use tags: You type them when you record or correct an expense; new ones are created right there, with no other screen. An expense can have several.Each tag remembers the last category you used it with and fills it in next time (you can change it).In Transactions, tap an expense's tag (or pick it under View → Tag) to see only those expenses and their total, «expenses with this tag». Since an expense can have several, those totals don't add up with each other.In Transactions → Expenses → Tags, the Owner and the Manager rename, merge two into one or delete tags. Deleting a tag removes it from the expenses; the expenses aren't deleted.",{"id":1447,"title":1448,"titles":1449,"content":1450,"level":263},"\u002Fdocs\u002Fwork\u002Fexpenses#who-records-and-who-approves","Who records and who approves",[147],"Owner and Manager record expenses that count right away.Team members record their own expenses, which stay pending approval: they do not count until the Owner or a Manager approves them. Each team member sees only their own and can correct them while they are pending.At the top of Transactions, the Owner and the Manager see Expenses to approve with the count and the total. Tap Approve or Reject (with a reason). Nobody approves what they recorded.",{"id":1452,"title":1453,"titles":1454,"content":1455,"level":263},"\u002Fdocs\u002Fwork\u002Fexpenses#transactions","Transactions",[147],"Finance → Transactions shows money in and out for the period in one list, each with its sign: + in, − out. The chips on top filter with one tap: All: collections, expenses and commissions, without rejected or voided expenses (those show only under Expenses).Collections: collections, voids, refunds and the cash drawer.Expenses: recorded expenses. Pending, rejected or voided ones are marked and do not count.Commissions: what Mercado Pago and Fiuit charge on each collection, plus the calculated team commission total, with a link to Commissions. Search also finds who an expense was paid to and its note. Tap Details on an expense to see the receipt, Correct it (every change stays in the history: who, when, before and after) or Void it with a reason. An expense is never deleted and there is no month close.",{"id":1457,"title":1458,"titles":1459,"content":1460,"level":263},"\u002Fdocs\u002Fwork\u002Fexpenses#from-the-team-bot-on-telegram","From the team bot on Telegram",[147],"Your team can also record expenses from the team Telegram: «spent 5000 on supplies», \u002Fexpense or the receipt photo, which is attached. The bot asks for what's missing, shows the amount and you confirm with a button; a large amount asks for a second confirmation. What Staff record stays pending approval, just like from the panel.",{"id":1462,"title":1378,"titles":1463,"content":1464,"level":263},"\u002Fdocs\u002Fwork\u002Fexpenses#with-wagy-the-api-and-mcp",[147],"Wagy records an expense in conversation: say «I spent 5000 on supplies» (or «yesterday I paid 80 for fuel») and it shows the expense with category, amount, day and method for you to confirm once. If you didn't say the amount or the category, it asks; it never makes them up. If the amount is large for your business (from twice what you pay per month for your plan) or you already recorded the same one that day, it first asks you to confirm with a button. For rent or utilities it asks whether to repeat it every month. It also voids one («void today's 5000 expense, it was a duplicate») and answers «how much did I spend on advertising this month?». It also understands tags: «I spent 3000 on the van» uses the «van» tag and its category, «how much did I spend on the van this month?» filters by it and «merge van with vans» proposes merging them before doing it. Approving team expenses is done in Transactions. Through the API and MCP, GET \u002Fv1\u002Fpayments\u002Ffinance\u002Fmovements lists the same with group (collections, expenses or commissions) and GET \u002Fv1\u002Fpayments\u002Fexpenses\u002F{id} (expense_get) returns one expense; recording is expense_record, approving expense_approve and voiding expense_void, always with confirmation.",{"id":157,"title":156,"titles":1466,"content":1467,"level":257},[],"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":1469,"title":1470,"titles":1471,"content":1472,"level":263},"\u002Fdocs\u002Fteam\u002Ftelegram-team#link-your-telegram","Link your Telegram",[156],"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":1474,"title":1475,"titles":1476,"content":1477,"level":263},"\u002Fdocs\u002Fteam\u002Ftelegram-team#add-someone-new-through-telegram","Add someone new through Telegram",[156],"If the person isn't on the team and you don't have their number, invite them through Telegram: in My business → Team and resources → Add → Invite, choose Channel: Telegram, type their name and save. We show a link only once to copy or share: when they open it in Telegram and tap Start, they join the team and get linked. It works once and expires after 48 hours. Only for operational staff; other roles are invited by email. WhatsApp is still the default channel. The first Telegram account that opens the link uses it, so share it only with that person. When someone uses it, we notify you with their Telegram account name, which you also see on their row and profile in People; if it isn't who you expected, deactivate them. If the link was shared too widely before it was used, cancel it: in Pending invitations, Cancel invitation.",{"id":1479,"title":1480,"titles":1481,"content":1482,"level":263},"\u002Fdocs\u002Fteam\u002Ftelegram-team#which-alerts-you-get","Which alerts you get",[156],"AlertWhen it arrivesAssigned taskSomeone assigned a task to youUnclaimed jobThere is a queue task your team can takeReminderAn appointment is coming up (team advance notice)Daily reportA summary of your dayChangesOne of your tasks was cancelled or changedExpense to approveOwner and Manager only: someone on the team recorded an expense waiting for your approval (amount and category; never the note) Alerts come with buttons so you can act without opening the dashboard: Open opens the Mini App straight on that task. For an expense to approve, it opens Finance → Transactions, where Expenses to approve is.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 reminders and rules. If you turn one on, the team receives it on this channel.",{"id":1484,"title":1485,"titles":1486,"content":1487,"level":263},"\u002Fdocs\u002Fteam\u002Ftelegram-team#choose-how-to-receive-them","Choose how to receive them",[156],"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, changes or (Owner and Manager) expenses to approve. If Telegram cannot deliver an alert (for example, you blocked the bot), the alert falls back to the next channel.",{"id":1489,"title":1490,"titles":1491,"content":1492,"level":263},"\u002Fdocs\u002Fteam\u002Ftelegram-team#commands","Commands",[156],"CommandWhat it does\u002FstartLinks your account (with the link from My account)\u002FnextYour next task with all the detail: customer, order, address, Google Maps and Waze, and its stage buttons. Completing it shows the following one\u002Fnext5Your next 5 tasks, with Start or View to choose the order\u002FfreeUnassigned tasks you can take, with Take\u002FtodayShows your day, per business\u002FexpenseRecords an expense: type it («spent 5000 on supplies») or send the receipt photo\u002FleaveUnlinks your Telegram\u002FhelpReminds you how to take a task, move it to the next stage, share your live location and the commands",{"id":1494,"title":1495,"titles":1496,"content":1497,"level":263},"\u002Fdocs\u002Fteam\u002Ftelegram-team#your-next-task-with-next","Your next task with \u002Fnext",[156],"\u002Fnext shows a single task: the one you already have in progress or, if none, the next one by today's schedule (overdue first; tasks without a time at the end). Tap Start, On my way or Complete (the names are your business's stages) and the bot sends the following one on its own, until none are left. If moving on needs something missing (a photo, a required field, the payment or your location), the card says what is missing and Open takes you to the task in the Mini App. Cancelling or marking that the customer was not there is also done in the Mini App. Buttons only do what your role allows, and an old button of a task that already changed does not move it forward: it shows how it is now.",{"id":1499,"title":1500,"titles":1501,"content":1502,"level":263},"\u002Fdocs\u002Fteam\u002Ftelegram-team#record-an-expense","Record an expense",[156],"Message the bot «spent 5000 on supplies» (or «paid 80 for fuel yesterday», or just «expense 30 fuel»), use \u002Fexpense or send the receipt photo, with or without text. The photo is kept as the expense receipt; the bot doesn't read the receipt, so if you didn't type the amount it asks how much it was. If the amount isn't clear (for example, two numbers, or decimals in guaraníes), it asks for the total. Always in your business currency, with no conversion.If it doesn't recognize the category, you pick one with a button. If you work in several businesses, you first pick which one.It shows the expense with the amount, the category and the day, and you confirm with Confirm (or Change category or Cancel).If the amount is large for your business (from twice what it pays per month for its plan), it asks for a second confirmation. If the same expense already exists that day, the card warns you so you don't record it twice. Tapping Confirm twice doesn't record two expenses. What Staff record stays pending approval until the Owner or a Manager approves it (they get the Expense to approve alert); what the Owner and Managers record counts right away. Roles that don't record expenses get a notice and nothing is recorded.",{"id":1504,"title":1505,"titles":1506,"content":1507,"level":263},"\u002Fdocs\u002Fteam\u002Ftelegram-team#my-day-mini-app","\"My day\" Mini App",[156],"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":1509,"title":1510,"titles":1511,"content":1512,"level":263},"\u002Fdocs\u002Fteam\u002Ftelegram-team#team-group","Team group",[156],"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 work team 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 team 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 team 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 My business → Team and resources → person profile; 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":1514,"title":1515,"titles":1516,"content":1517,"level":263},"\u002Fdocs\u002Fteam\u002Ftelegram-team#limits-and-security","Limits and security",[156],"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":161,"title":160,"titles":1519,"content":1520,"level":257},[],"What each role (Owner, Manager, Team and Viewer) 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":1522,"title":1523,"titles":1524,"content":1525,"level":263},"\u002Fdocs\u002Fteam\u002Froles#the-roles","The roles",[160],"RoleFor whomWhat they doOwner (owner)Whoever administers the accountEverything, including API keys, the team and channelsManager (manager)Whoever runs the businessRuns the business: catalog, team, customers, bot, rules, channels and webhooks. Does not administer API keysTeam (staff)Whoever serves or deliversSees and works on their own: their tasks and what their team can takeViewer (viewer)Partners, accountantsViews Today, Work and conversations; changes nothingCollaborator (collaborator)The Fiuit partner who set up your projectConfigures and operates like a Manager but does not see money (charges, balances, Finance, payments, Mercado Pago, plan and usage) and does not manage the team. Nobody invites them: they become one when the Owner accepts the project. See Partners",{"id":1527,"title":1528,"titles":1529,"content":1530,"level":263},"\u002Fdocs\u002Fteam\u002Froles#what-each-one-sees-in-the-dashboard","What each one sees in the dashboard",[160],"SectionOwnerManagerTeamViewerToday and WorkYesYesTheir ownYes (read)ConversationsYesYesOnly theirsYes (read)Catalog, Team, CustomersYesYesNoNoBot and RulesYesYesNoNoSettings, Channels, AI and usageYesYesNoNoWebhooksYesYesNoNoAPI keys (Developers)YesNoNoNo Team members 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":1532,"title":1533,"titles":1534,"content":1535,"level":263},"\u002Fdocs\u002Fteam\u002Froles#invite-the-team","Invite the team",[160],"In People you can invite in two ways: By message (WhatsApp): only for the Team role, 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, Team or Viewer. 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":1537,"title":1538,"titles":1539,"content":1540,"level":301},"\u002Fdocs\u002Fteam\u002Froles#limits-by-plan","Limits by plan",[160,1533],"Operators are the people with access to the dashboard plus pending invitations. Bookable people without an account (resources) do not count. Solo: 2 operators: you and one person with the Team role. It does not include Manager or other roles.Team plan: 5. Pro: 20. Business: custom. In People you see the counter (“People with access: 1 of 2”). When you reach the limit, Invite is disabled with a short text and a link to Settings → Plan to change plan. To move to a lower plan, first remove whatever exceeds the new plan's limit; nothing is deleted automatically.",{"id":1542,"title":1543,"titles":1544,"content":1545,"level":301},"\u002Fdocs\u002Fteam\u002Froles#agenda-links-for-staff","Agenda links for staff",[160,1533],"Every staff member with resources has an agenda link to open “My day” without signing in. In My business → Team and resources → person profile 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). It goes to their verified WhatsApp or, if they have none, through the Telegram team bot they are linked to; the channel must be connected. If they just received one, wait a minute.Revoke and end sessions: the link and any sessions opened with it stop working immediately. From a link-based \"My day\", the person can move their tasks forward even when the stage asks for a form, their location or a confirmation, and read and add internal comments (the customer never receives them). Payment, assignment and photos or signatures are completed from the panel or the chat. 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":1547,"title":1548,"titles":1549,"content":1550,"level":263},"\u002Fdocs\u002Fteam\u002Froles#several-projects","Several projects",[160],"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":1552,"title":1553,"titles":1554,"content":1555,"level":263},"\u002Fdocs\u002Fteam\u002Froles#platform-support","Platform support",[160],"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":1557,"title":1558,"titles":1559,"content":1560,"level":263},"\u002Fdocs\u002Fteam\u002Froles#api-keys-and-permissions","API keys and permissions",[160],"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":1562,"title":1563,"titles":1564,"content":1565,"level":263},"\u002Fdocs\u002Fteam\u002Froles#cancelling-the-subscription","Cancelling the subscription",[160],"Only the Owner can cancel the project's Fiuit subscription: in Settings → Plan, tap Cancel subscription and confirm. No calls or forms. The plan is not renewed and stays until the end of the period already paid; while the project is not closed you can tap Undo cancellation. Cancelling does not delete data. More in What happens if…? Subscription and cancellation.",{"id":1567,"title":1568,"titles":1569,"content":1570,"level":263},"\u002Fdocs\u002Fteam\u002Froles#where-do-i-organize-people-resources-and-the-catalog","Where do I organize people, resources and the catalog?",[160],"My business has Details, Catalog, Team and resources and Stages. Team and resources brings People, Teams, Zones and places and equipment together on one screen, each in its own tab. Work teams bring people and resources together with their services and zones; the Team role refers to panel access. Creating a person from Resources requires no account or invitation. “Invite to the panel” is optional in their profile. Edit roles and panel access in each person’s details; plans bring their subscribers together.",{"id":1572,"title":1573,"titles":1574,"content":1575,"level":263},"\u002Fdocs\u002Fteam\u002Froles#let-a-team-member-receive-tasks","Let a team member receive tasks",[160],"In My business → Team and resources, open their profile and turn on Receives tasks. Choose the groups they work in (with each group’s services) and review their hours: business hours are the default, or you can enter their own. Confirm to create a linked schedule using their name and photo. Their role stays the same. People and the resource show the same profile: access and schedule belong to the same person. If they already receive tasks, the switch is on. Unlink is visible next to the switch only to correct an identity or duplicate; it is not part of normal use. Shared capacity and vehicles are not “the same person”. You can also tell Wagy “Sebastian also receives tasks” and confirm the proposal.",{"id":165,"title":164,"titles":1577,"content":1578,"level":257},[],"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":1580,"title":1581,"titles":1582,"content":1583,"level":263},"\u002Fdocs\u002Fteam\u002Fnotifications#the-bell","The bell",[164],"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":1585,"title":1586,"titles":1587,"content":1588,"level":263},"\u002Fdocs\u002Fteam\u002Fnotifications#which-notices-there-are","Which notices there are",[164],"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 team 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 dayLate taskA scheduled task is past its end plus the grace period and is still open (assignee, Owner and Managers)Wagy suggestionWagy has something to propose",{"id":1590,"title":1591,"titles":1592,"content":1593,"level":263},"\u002Fdocs\u002Fteam\u002Fnotifications#choose-what-you-get-and-where","Choose what you get and where",[164],"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":1595,"title":1596,"titles":1597,"content":1598,"level":263},"\u002Fdocs\u002Fteam\u002Fnotifications#push-on-your-phone-and-browser","Push on your phone and browser",[164],"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":1600,"title":1601,"titles":1602,"content":1603,"level":263},"\u002Fdocs\u002Fteam\u002Fnotifications#project-rules-owner","Project rules (Owner)",[164],"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":169,"title":168,"titles":1605,"content":1606,"level":257},[],"Commission rules per person and per service or product, tips and a period report in CSV, calculated on the fly. In Finance > Reports > Team 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":1608,"title":1609,"titles":1610,"content":1611,"level":263},"\u002Fdocs\u002Fteam\u002Fcommissions#how-it-is-calculated","How it is calculated",[168],"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":1613,"title":123,"titles":1614,"content":1615,"level":263},"\u002Fdocs\u002Fteam\u002Fcommissions#rules",[168],"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":1617,"title":1618,"titles":1619,"content":1620,"level":263},"\u002Fdocs\u002Fteam\u002Fcommissions#each-persons-day","Each person's day",[168],"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":1622,"title":1623,"titles":1624,"content":1625,"level":263},"\u002Fdocs\u002Fteam\u002Fcommissions#period-report","Period report",[168],"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":1627,"title":1628,"titles":1629,"content":1630,"level":263},"\u002Fdocs\u002Fteam\u002Fcommissions#settling-a-period","Settling a period",[168],"In Period, the Owner and Manager tap Settle on a person's card. A sheet opens with the period, the amounts that get frozen (commission, adjustments and automatic adjustments from already settled periods; tips are not included), refunds of payments from another period if any, and the reason, which is recorded. Once confirmed, the period is frozen: its numbers no longer change, in the result either. Only once. Settling the same period twice does not freeze it twice, and two settled periods of the same person cannot overlap. Only days that have passed can be settled.Updated amounts. If they change before confirmation, settlement waits: the panel shows the new amounts for you to review and confirm again. With Wagy, ask for a new proposal.Later corrections. If a payment is later voided or refunded, or a rule changes retroactively, the settled period does not change: the difference shows up as an automatic adjustment on the first unsettled day, referencing the settled period, and goes into the next settlement.It is not a payment. Settling closes the period; you pay the person outside Fiuit. You can also ask Wagy: «settle Ana's commissions for last month». Wagy finds the person, shows you the amounts that get frozen and asks you to confirm.",{"id":1632,"title":550,"titles":1633,"content":1634,"level":263},"\u002Fdocs\u002Fteam\u002Fcommissions#who-sees-what",[168],"RoleSeesCanOwner and ManagerThe whole teamRules, adjustments, tips, CSV, settleTeamOnly 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 and settle a person's period (with your confirmation); rules, adjustments and tips are handled in the panel. The API and MCP offer the same reads (scope commissions:read) and settling (scope commissions:settle).",{"id":173,"title":172,"titles":1636,"content":1637,"level":257},[],"How a Fiuit partner creates projects for their clients, hands them over to the Owner and stays on as a collaborator without access to money. A Fiuit partner (a local implementer, an agency or a creator) can set up a business's project and hand it over ready to its Owner. Fiuit gives the partner their own code and links it to their account.",{"id":1639,"title":1640,"titles":1641,"content":1642,"level":263},"\u002Fdocs\u002Fteam\u002Fpartners#my-projects-for-partners","My projects (for partners)",[172],"If your account belongs to a partner, My projects shows up in the menu. There you see your clients' projects: the ones you created and the ones Fiuit assigned to you, with their plan, status and creation date. You only see yours, never another partner's. Tap Create project for a client and enter the business name (and the industry, if you want to start from a template).Set it up like any project: services, team, hours, channels and bot. You can also do it by chatting with Wagy.Invite the real Owner from People with the Owner role. How many projects you can create depends on your account's plan; if you reach the limit, contact Fiuit.",{"id":1644,"title":1645,"titles":1646,"content":1647,"level":263},"\u002Fdocs\u002Fteam\u002Fpartners#when-the-owner-accepts","When the Owner accepts",[172],"The Owner becomes the project's Owner and you become a Collaborator: You keep configuring and operating like a Manager: catalog, resources, hours, bot, rules, customers, conversations and tasks.You don't see any money: no charges, balances, Finance section, payment settings, Mercado Pago, or Fiuit plan and usage.You don't manage the team or webhooks.",{"id":1649,"title":1650,"titles":1651,"content":1652,"level":263},"\u002Fdocs\u002Fteam\u002Fpartners#for-the-owner","For the Owner",[172],"You see the collaborator in People and can remove them whenever you want: they lose access immediately. Everything they do is logged under their name in the business activity.",{"id":177,"title":176,"titles":1654,"content":1655,"level":257},[],"How the team does its tasks full screen, one at a time or several, without blocking the work. Focus shows your open tasks full screen, in the order of the Today list. Built for the phone and for a tablet at the counter or the kitchen.",{"id":1657,"title":1658,"titles":1659,"content":1660,"level":263},"\u002Fdocs\u002Fteam\u002Ffocus#how-to-open-it","How to open it",[176],"In Today, tap the ▶ Focus button (next to View on a phone). It appears when you have open tasks and permission to act on them. Leave with the ✕, with Esc or with «back», without changing anything.",{"id":1662,"title":1663,"titles":1664,"content":1665,"level":263},"\u002Fdocs\u002Fteam\u002Ffocus#one-task-and-up-next","One task and «Up next»",[176],"You see the current task with the button for its stage action. When you finish it, the next one comes in.Below, Up next: the following tasks, one line each.Each stage says who did it and when.If there is a destination, you see the address with Go and a map; if there is a balance, the payments stay in view.",{"id":1667,"title":1668,"titles":1669,"content":1670,"level":301},"\u002Fdocs\u002Fteam\u002Ffocus#gestures","Gestures",[176,1663],"With the One by one | List selector: Right: Done (5 seconds to Undo).Left: Later (goes to the end of the queue).Down: the day's list. The card adds Call, WhatsApp and «I have a problem». The selector sits at the top: One by one shows the single card and List, several cards at once. It is remembered per person.",{"id":1672,"title":1673,"titles":1674,"content":1675,"level":263},"\u002Fdocs\u002Fteam\u002Ffocus#do-any-task-without-being-blocked","Do any task without being blocked",[176],"Tap any task in Up next to do it now: the other goes back to the list. If the order can't be followed, you aren't stuck.",{"id":1677,"title":1678,"titles":1679,"content":1680,"level":263},"\u002Fdocs\u002Fteam\u002Ffocus#the-whistle","The whistle",[176],"A new task joins Up next, without interrupting the current one, with the «A new task came in» notice and vibration if the device supports it.A short «fiuít» whistle plays where the phone respects silent mode (today, iPhone).The sound switch (the bell) whistles once when turned on, so you can test it. Turned off, it stays silent.With the iPhone on silent it doesn't play: the notice stays, and it lights up for a moment.If «Tap to enable sound» appears, tap inside Focus.",{"id":1682,"title":1683,"titles":1684,"content":1685,"level":263},"\u002Fdocs\u002Fteam\u002Ffocus#reschedule-from-focus","Reschedule from Focus",[176],"Reschedule offers +1 h, +3 h, Tomorrow and +3 days using real availability; if the time is taken, it shows the next free one. The task leaves the queue with a notice and Undo.",{"id":1687,"title":1688,"titles":1689,"content":1690,"level":263},"\u002Fdocs\u002Fteam\u002Ffocus#focus-in-the-telegram-mini-app","Focus in the Telegram Mini App",[176],"It works the same in the Telegram Mini App. If the stage has Live location (for example «On the way»), Focus asks for permission and shares your position with the «Sharing your location» notice and Pause. It stops when you leave the stage or close Focus; locking the phone also stops it, so for a full route use Telegram's live location. The screen stays on while you use Focus and is released after 15 minutes without a touch (except in List on a tablet or computer, where it always stays on).",{"id":181,"title":180,"titles":1692,"content":1693,"level":257},[],"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":1695,"title":1696,"titles":1697,"content":1698,"level":263},"\u002Fdocs\u002Fquickstart#_1-get-a-key","1. Get a key",[180],"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":1700,"title":1701,"titles":1702,"content":1703,"level":263},"\u002Fdocs\u002Fquickstart#_2-check-who-you-are","2. Check who you are",[180],"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":1705,"title":1706,"titles":1707,"content":1708,"level":263},"\u002Fdocs\u002Fquickstart#_3-list-services","3. List services",[180],"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":1710,"title":1711,"titles":1712,"content":1713,"level":263},"\u002Fdocs\u002Fquickstart#_4-find-available-slots","4. Find available slots",[180],"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":1715,"title":1716,"titles":1717,"content":1718,"level":263},"\u002Fdocs\u002Fquickstart#_5-hold-the-slot","5. Hold the slot",[180],"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":1720,"title":1721,"titles":1722,"content":1723,"level":263},"\u002Fdocs\u002Fquickstart#_6-confirm","6. Confirm",[180],"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":1725,"title":1726,"titles":1727,"content":1728,"level":263},"\u002Fdocs\u002Fquickstart#same-flow-in-javascript","Same flow in JavaScript",[180],"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":1730,"title":1731,"titles":1732,"content":1733,"level":263},"\u002Fdocs\u002Fquickstart#next","Next",[180],"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":190,"title":189,"titles":1735,"content":1736,"level":257},[],"API keys, scopes, and which routes you can use with a key and which are dashboard-only.",{"id":1738,"title":1739,"titles":1740,"content":1741,"level":263},"\u002Fdocs\u002Fapi\u002Fauthentication#api-keys","API keys",[189],"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":1743,"title":1744,"titles":1745,"content":1746,"level":263},"\u002Fdocs\u002Fapi\u002Fauthentication#scopes","Scopes",[189],"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, teams, schedules, rule-based automations, knowledge and botsettings:writeReplace and revert stages, actions and forms (\u002Fservices\u002F{id}\u002Fstages)webhooks:manageOutgoing webhook endpointsproducts:read \u002F products:writeRead and manage the product catalogpayments:read, payments:read_balanceRead payments and task balancespayments:record, payments:link, payments:void, payments:adjust, payments:refund, payments:fiscalRecord payments, generate links, void, adjust, refund and mark fiscal detailsexpenses:read, expenses:record, expenses:void, expenses:approveRead, record, void and approve expensescommissions:read, commissions:configure, commissions:adjust, commissions:settle, commissions:exportRead, configure, adjust, settle and export commissionscash:read, cash:remit, cash:close, cash:configureRead cash, remit, close and configurefinance:analyze, finance:exportView and export Money reportscustomer_balance:read, customer_account:readRead the customer balance and account statementprepaid:read, prepaid:manage, prepaid:sell, prepaid:benefitsRead, manage and sell packages and clubs, and manage benefitspartner:readRead the dashboard of the partner who issued the key A request without the needed scope returns 403 with code: \"insufficient_scope\". Knowledge sources (\u002Fknowledge\u002Fsources) and the per-channel bot policy accept config:read \u002F config:write. GET \u002Fconnection\u002Fprojects lists the credential’s projects; managing them remains dashboard-only.",{"id":1748,"title":1749,"titles":1750,"content":1751,"level":263},"\u002Fdocs\u002Fapi\u002Fauthentication#what-is-dashboard-only","What is dashboard-only",[189],"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 rules (\u002Fautomation-flows), the Wagy assistant and its plan.Team, invitations, API keys, projects and platform support.Team Telegram and alert preferences. The endpoint list marks which is which.",{"id":1753,"title":1754,"titles":1755,"content":1756,"level":263},"\u002Fdocs\u002Fapi\u002Fauthentication#rotation","Rotation",[189],"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":194,"title":193,"titles":1758,"content":1759,"level":257},[],"Formats, idempotency, pagination, errors and rate limits of the v1 API.",{"id":1761,"title":1762,"titles":1763,"content":1764,"level":263},"\u002Fdocs\u002Fapi\u002Fconventions#the-basics","The basics",[193],"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":1766,"title":1767,"titles":1768,"content":1769,"level":263},"\u002Fdocs\u002Fapi\u002Fconventions#idempotency","Idempotency",[193],"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":1771,"title":1772,"titles":1773,"content":1774,"level":263},"\u002Fdocs\u002Fapi\u002Fconventions#pagination","Pagination",[193],"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":1776,"title":1777,"titles":1778,"content":1779,"level":263},"\u002Fdocs\u002Fapi\u002Fconventions#errors","Errors",[193],"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 timeteam_policy_missing409A team of the service has no service mode yet: set it to take bookingsalready_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":1781,"title":1782,"titles":1783,"content":1784,"level":263},"\u002Fdocs\u002Fapi\u002Fconventions#rate-limits","Rate limits",[193],"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":198,"title":197,"titles":1786,"content":1787,"level":257},[],"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":1789,"title":1790,"titles":1791,"content":1792,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#schedule-times-and-bookings","Schedule: times and bookings",[197],"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":1794,"title":1795,"titles":1796,"content":1797,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#work-tasks-and-actions","Work: tasks and actions",[197],"A booking is a task with stages. Tasks without a time (for example deliveries) sit in a team'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":1799,"title":1800,"titles":1801,"content":1802,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#catalog-and-stages","Catalog and stages",[197],"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\u002Fflows, \u002Fflows\u002F{id}, \u002Fflows\u002F{id}\u002Fversions, \u002Fflows\u002F{id}\u002Fversions\u002F{version}config:readGET\u002Fflow-message-catalogconfig:readPOST\u002Fflowssettings:writePATCH\u002Fflows\u002F{id}settings:writePOST\u002Fflows\u002F{id}\u002Fvalidate, \u002Fflows\u002F{id}\u002Fcopy, \u002Fflows\u002F{id}\u002Fversions\u002F{version}\u002Frevertsettings:writeGET\u002Fflow-examples, \u002Fbase-statesconfig:read",{"id":1804,"title":1805,"titles":1806,"content":1807,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#customers","Customers",[197],"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":1809,"title":1810,"titles":1811,"content":1812,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#conversations","Conversations",[197],"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":1814,"title":97,"titles":1815,"content":1816,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#bot-and-knowledge",[197],"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":1818,"title":1819,"titles":1820,"content":1821,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#outgoing-webhooks","Outgoing webhooks",[197],"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":1823,"title":1824,"titles":1825,"content":1826,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#platform","Platform",[197],"MethodPathScopeGET\u002Fmeany",{"id":1828,"title":1829,"titles":1830,"content":1831,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#dashboard-only-they-do-not-accept-api-keys","Dashboard-only (they do not accept API keys)",[197],"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)Rules\u002Fautomation-flows (see Rules)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":1833,"title":1834,"titles":1835,"content":1836,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#example-slots","Example: slots",[197],"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":1838,"title":1839,"titles":1840,"content":1841,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#example-booking-object","Example: booking object",[197],"{\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":1843,"title":1844,"titles":1845,"content":1846,"level":263},"\u002Fdocs\u002Fapi\u002Fendpoints#recent-changes","Recent changes",[197],"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":202,"title":201,"titles":1848,"content":1849,"level":257},[],"Signed notifications for what happens to your bookings, with automatic retries, a delivery log and examples to verify the signature.",{"id":1851,"title":1852,"titles":1853,"content":1854,"level":263},"\u002Fdocs\u002Fapi\u002Fwebhooks#events","Events",[201],"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.workitem.reopenedA task was reopenedworkitem.stage_enteredThe task entered a stageworkitem.stage_movedThe task moved to another stageworkitem.tool_usedA stage action or tool was usedpayment.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":1856,"title":1857,"titles":1858,"content":1859,"level":263},"\u002Fdocs\u002Fapi\u002Fwebhooks#payload","Payload",[201],"The envelope keeps data.booking for bookings; charges use data.payment (charge ID), messages data.message (message ID), handoffs data.conversation (conversation ID) and task events (workitem.*) data.workitem (with stage and status; the identifier is id for workitem.reopened and workitem_id for the other task events). 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":1861,"title":1862,"titles":1863,"content":1864,"level":263},"\u002Fdocs\u002Fapi\u002Fwebhooks#verifying-the-signature","Verifying the signature",[201],"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":1866,"title":1867,"titles":1868,"content":1869,"level":263},"\u002Fdocs\u002Fapi\u002Fwebhooks#retries","Retries",[201],"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":1871,"title":1872,"titles":1873,"content":1874,"level":263},"\u002Fdocs\u002Fapi\u002Fwebhooks#security-and-limits","Security and limits",[201],"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":206,"title":205,"titles":1876,"content":1877,"level":257},[],"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":1879,"title":1880,"titles":1881,"content":1882,"level":263},"\u002Fdocs\u002Fapi\u002Fsdks#typescript","TypeScript",[205],"The client (packages\u002Fsdk-ts) is a light wrapper over fetch with types for every route.",{"id":1884,"title":1885,"titles":1886,"content":1887,"level":301},"\u002Fdocs\u002Fapi\u002Fsdks#install-from-the-repository","Install from the repository",[205,1880],"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":1889,"title":1890,"titles":1891,"content":1892,"level":301},"\u002Fdocs\u002Fapi\u002Fsdks#book-a-slot","Book a slot",[205,1880],"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":1894,"title":1772,"titles":1895,"content":1896,"level":301},"\u002Fdocs\u002Fapi\u002Fsdks#pagination",[205,1880],"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":1898,"title":1899,"titles":1900,"content":1901,"level":301},"\u002Fdocs\u002Fapi\u002Fsdks#customers-and-actions","Customers and actions",[205,1880],"\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":1903,"title":1904,"titles":1905,"content":1906,"level":263},"\u002Fdocs\u002Fapi\u002Fsdks#python","Python",[205],"The client (packages\u002Fsdk-py) uses httpx and generated Pydantic v2 models.",{"id":1908,"title":1885,"titles":1909,"content":1910,"level":301},"\u002Fdocs\u002Fapi\u002Fsdks#install-from-the-repository-1",[205,1904],"pip install \u002Fpath\u002Fto\u002Fwagendapp\u002Fpackages\u002Fsdk-py\n# or, with uv:\nuv pip install \u002Fpath\u002Fto\u002Fwagendapp\u002Fpackages\u002Fsdk-py",{"id":1912,"title":1890,"titles":1913,"content":1914,"level":301},"\u002Fdocs\u002Fapi\u002Fsdks#book-a-slot-1",[205,1904],"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":1916,"title":1782,"titles":1917,"content":1918,"level":263},"\u002Fdocs\u002Fapi\u002Fsdks#rate-limits",[205],"The limit is per key and per project. On a 429, wait retry_after \u002F retryAfter seconds before retrying. See Conventions.",{"id":1920,"title":1921,"titles":1922,"content":1923,"level":263},"\u002Fdocs\u002Fapi\u002Fsdks#regenerating-the-sdks","Regenerating the SDKs",[205],"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":210,"title":209,"titles":1925,"content":1926,"level":257},[],"Every v1 operation that accepts a key, generated from the OpenAPI contract when the site is built. This page is generated on every build from packages\u002Fopenapi\u002Fopenapi.yaml (OpenAPI 3.1); it is not written by hand. It lists the operations that accept an API key, grouped by the contract topics. Routes that only accept a dashboard session stay in the contract but out of this reference. Operation names, summaries and descriptions come from the contract.",{"id":1928,"title":1929,"titles":1930,"content":1931,"level":263},"\u002Fdocs\u002Fapi\u002Freference#topics","Topics",[209],"TopicsOperationsslots1holds3bookings31booking-series6catalog37products19zones8payments79stats8customers22search1flows18comments8conversations14simulator7automations14platform25auth1knowledge19tenancy9site4notifications8prepaid13attachments4bot8feedback4help1",{"id":1933,"title":1934,"titles":1935,"content":1936,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fslots","API · slots",[],"slots operations in the OpenAPI contract that accept an API key.",{"id":1938,"title":1939,"titles":1940,"content":1941,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fslots#get-slots","GET \u002Fslots",[1934],"Horarios disponibles para un servicio Cruza todos los requisitos del servicio (profesional, máquina, sala…). Requiere slots:read. Un servicio desactivado responde 409 service_inactive y un resource_id desactivado 409 resource_inactive (no 404: existen, solo que no se pueden reservar). Usá day o from + to (uno u otro; si no, 422 invalid_slot_query). day es el día de apertura en la zona del negocio (F3-503): incluye los horarios de la noche que sigue después de las 00:00 (20:00 – 03:00 (+1)) y no la madrugada de ese día, que pertenece a la noche anterior. Un turno puede cruzar las 00:00 sin cortarse. Authentication: API key or dashboard sessionScopes: slots:read Parameters NameInRequiredTypeDescriptionservice_idqueryYesstringdayqueryNostring (date)Día de apertura local (YYYY-MM-DD); sin from\u002Fto.fromqueryNostring (date-time)Con to; sin day.toqueryNostring (date-time)party_sizequeryNointeger default 1resource_idqueryNostringPreferencia (ej. un barbero)resource_idsqueryNoarrayCo-responsables activos elegibles; todos quedan ocupados aunque superen el mínimo del requisito. Intersección antes del límite de horarios. No combinar con resource_id (422). Tenant de la credencial y RLS.booking_idqueryNostring (uuid)Tarea visible del mismo tenant y servicio; excluye su propia ocupación (también pooled). Conserva la zona de la tarea; zone_id explícito diferente responde 422 invalid_slot_query. Si no se envían recursos conserva todos los actuales. Una tarea ajena responde 404.duration_minqueryNointegerDuración propia de la tarea en minutos (5–1440); reemplaza la del servicio en los requisitos sin duración propia. La agenda del panel la usa para pintar los huecos de un turno estirado o achicado.aroundqueryNostring (date-time)Hora preferida para ordenarlimitqueryNointeger default 20zone_idqueryNostringZona (F1-38): solo sus días y horas, cruzados con la disponibilidad de sus miembros y su tope por franja. Si está desactivada, consulta general como al reagendar; una zona inexistente o ajena devuelve 422 invalid_slot_queryintake_dataqueryNostringObjeto JSON codificado con el destino del formulario (dirección, CEP, barrio, coordenadas). Resuelve la zona con la misma regla de POST \u002Fholds y POST \u002Fbookings. No combinar con zone_id (422 intake_invalid). Sin contexto de destino\u002Fzone_id, consulta general del servicio. Mantiene slots:read y tenant de la credencial. Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":1943,"title":1944,"titles":1945,"content":1946,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fholds","API · holds",[],"holds operations in the OpenAPI contract that accept an API key.",{"id":1948,"title":1949,"titles":1950,"content":1951,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fholds#post-holds","POST \u002Fholds",[1944],"Crear una pre-reserva (hold) de 10 minutos La misma Idempotency-Key conserva el conjunto pedido, también en replays concurrentes del core. Otro conjunto responde 422 idempotency_conflict; el orden de recursos no altera el payload. 409 membership_blocked si el cliente tiene la membresía que cubre ese servicio bloqueada por impago (plan en el cuerpo; se libera al pagar la cuota). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: HoldCreate Responses StatusDescription201Creado (Booking)409Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":1953,"title":1954,"titles":1955,"content":1956,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fholds#delete-holdsid","DELETE \u002Fholds\u002F{id}",[1944],"Liberar un hold Cancelar nunca se bloquea (F3-181, decisión del dueño 2026-10-09). Con etapas v2, liberar una tarea held\u002Fpending_payment no exige los datos de la etapa cancelada ni de la salida «cancelar». Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription204LiberadodefaultError (RFC 9457) (Problem)",{"id":1958,"title":1959,"titles":1960,"content":1961,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fholds#post-holdsidconfirm","POST \u002Fholds\u002F{id}\u002Fconfirm",[1944],"Confirmar un hold (o pasarlo a pending_payment si requiere seña) Serializa la confirmación con reinicios de configuración. Un hold pendiente cuyo servicio está inactivo responde 409 service_inactive; una confirmación ya comprometida conserva su replay idempotente. Confirmar para otro cliente (customer_id) cuya membresía que cubre ese servicio está bloqueada por impago responde 409 membership_blocked. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstringIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: HoldConfirm Responses StatusDescription200OK (Booking)409Error (RFC 9457) (Problem)410Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":1963,"title":1964,"titles":1965,"content":1966,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings","API · bookings",[],"bookings operations in the OpenAPI contract that accept an API key.",{"id":1968,"title":1969,"titles":1970,"content":1971,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-bookings","GET \u002Fbookings",[1964],"Listar reservas Por defecto from\u002Fto filtran por el inicio de la reserva (from \u003C= inicio \u003C to). Con overlap=true devuelven toda reserva que ocupa parte del rango (inicio \u003C to y fin > from): una tarea que empezó antes y sigue dentro también entra. El orden y el cursor siguen siendo por inicio. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionfromqueryNostring (date-time)toqueryNostring (date-time)overlapqueryNoboolean default falsetrue: from\u002Fto filtran por solapamiento (inicio \u003C to y fin > from) en vez de por inicio. Por defecto false.include_carriedqueryNoboolean default falseF3-573 (arrastre): con from\u002Fto, suma las tareas iniciadas que pasaron su fin y siguen ocupando su lugar en el rango (servicio de día completo o que no pide una persona, hasta 7 días después de su fin), aunque hayan empezado antes. Vienen con carried_over=true. Misma regla que GET \u002Fslots. Las reglas de visibilidad (staff) no cambian. Por defecto false: el listado no cambia.feesqueryNostring all, due default allFIU-510 · Tareas-cuota de las suscripciones. all (por defecto) las lista todas. due deja solo las por cobrar vencidas o dentro de su aviso (notice_days del plan) y saca las pagadas, las perdonadas y las de cobro automático al día (vuelven si el cobro falla o no llega). Es la vista de Hoy y Trabajo del panel, de Wagy y del MCP (list_tasks). Solo filtra: no cambia montos ni estados.scheduling_statequeryNopending, scheduled, queuestatusqueryNoBookingStatusresource_idqueryNostringcustomer_idqueryNostringlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200OK (BookingPage)defaultError (RFC 9457) (Problem)",{"id":1973,"title":1974,"titles":1975,"content":1976,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-bookings","POST \u002Fbookings",[1964],"Crear una tarea programada, de cola o pendiente de horario schedule_later=true sólo para servicios scheduled: owner\u002Fmanager o API key bookings:write. Crea pending_schedule sin allocations, vencimiento ni cobro; resource_ids son asignaciones operativas. false mantiene el alta legacy: scheduled requiere start, queue permite ventana opcional. Tenant desde credencial; misma clave y cuerpo devuelve el mismo ID aun tras programarlo; cuerpo distinto devuelve 422 idempotency_conflict. 409 membership_blocked si el cliente tiene la membresía que cubre ese servicio bloqueada por impago (plan en el cuerpo; se libera al pagar la cuota).\nCon flow_id en lugar de service_id (F3-457, ADR 0040 §4.3) crea una tarea sin servicio de un flujo por intención (reclamo, presupuesto): subject.type=intent, confirmada, en cola, sin horario, sin capacidad y sin monto (POST \u002Fv1\u002Fpayments\u002Fbookings\u002F{id}\u002Fdue lo fija; se cobra como cualquier tarea). Mismo permiso (tasks:create, API key bookings:write). 404 si el flujo no existe; 422 flow_not_intent si no es por intención, está desactivado o no es de cola. Emite booking.created (no booking.confirmed: no avisa confirmación al cliente). Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: BookingCreate Responses StatusDescription201Creado (Booking)409Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":1978,"title":1979,"titles":1980,"content":1981,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-bookingsid","GET \u002Fbookings\u002F{id}",[1964],"Detalle de reserva Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (Booking)defaultError (RFC 9457) (Problem)",{"id":1983,"title":1984,"titles":1985,"content":1986,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#patch-bookingsid","PATCH \u002Fbookings\u002F{id}",[1964],"Editar una reserva (cliente, servicio, recurso, personas, seña, notas, intake) Edición con las mismas garantías del motor (F1-27): una sola transacción con la reserva bloqueada, todo o\nnada, auditada con diff sin datos personales y con el evento booking.updated. Todos los campos son\nopcionales y null equivale a \"no tocar\". Permisos. owner, manager y API key con bookings:write: todos los campos. staff: solo notes e\nintake_data de reservas de SUS recursos (otro campo ⇒ 403 edit_forbidden; reserva ajena ⇒ 404).\nviewer ⇒ 403. El workspace sale siempre de la credencial.Idempotency-Key. Opcional si el cuerpo trae solo notes\u002Fintake_data (compatibilidad con v1);\nobligatorio para cualquier otro campo (422 idempotency_key_required). Misma clave + mismo cuerpo\ndevuelve la reserva sin volver a ejecutar; con otro cuerpo, 422 idempotency_conflict.Estados terminales (completada, cancelada, ausencia, fallida, vencida): solo notes y datos de\ncontacto; el resto ⇒ 409 booking_not_editable.Servicio, recurso y personas se revalidan con el motor de slots sobre el MISMO horario (grilla,\nhorario del recurso, requisitos, capacidad pooled y EXCLUDE); no se re-aplican lead time, anticipación\nmáxima ni cutoff. Sin lugar ⇒ 409 slot_taken (con reasons) y no queda ningún cambio. Cambiar de\nservicio conserva al mismo recurso si sigue sirviendo. No se cambia entre servicios con horario y de\ncola (422 service_mode_mismatch). En cola, el recurso nuevo respeta el tope de tareas activas\n(409 queue_full; 422 resource_not_eligible si no es del grupo del servicio).Seña. Ya paga: no se admite un cambio de servicio o de personas que altere su monto\n(409 deposit_locked). Pendiente: rige el monto nuevo y, si pasa a 0, la reserva se confirma.\nLa seña se cobra con POST \u002Fpayments\u002Fmanual (cobro unificado, F3-492: forma de pago y auditoría);\neditar la reserva ya no la marca pagada.Paquete o club (F3-261). Una tarea que usa una unidad de un plan no cambia de cliente ni de servicio\n(409 booking_covered_by_plan): primero se le quita el plan (POST \u002Fprepaid\u002Fbookings\u002F{booking_id}\u002Frelease).Cliente. customer_id reasigna a otro cliente existente del workspace (404 si no existe o es de\nprueba; las reservas de prueba no cambian de cliente: 422 test_booking_locked). customer corrige\nnombre, teléfono, email e idioma de la ficha (un teléfono de otro cliente ⇒ 409\ncustomer_phone_taken). La auditoría enmascara teléfono, email y nombre.Revisar dirección (F3-151). destination_review_action: confirm es una declaración explícita del\neditor autorizado, también si los valores son los mismos. Requiere expected_version (omitida ⇒ 422)\ny destino con texto más par de coordenadas finito\u002Fen rango (422 intake_invalid, reason\ndestination_review_requires_point). Resuelve sólo revisar-direccion, atómicamente y con auditoría,\nsin validar geocodificación externa; notas, coordenadas o PATCH tags sin esa acción no la resuelven.\nSe gobierna por la misma autorización de intake_data, incluido staff de SUS recursos y API key\nbookings:write; no habilita acciones autónomas del LLM. No exige Idempotency-Key por sí sola.Concurrencia. expected_version opcional salvo esa acción: si cambió ⇒ 409 version_conflict.Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionidpathYesstringIdempotency-KeyheaderNostringObligatorio salvo que el cuerpo traiga solo notes\u002Fintake_data. Request body (optional) application\u002Fjson: BookingPatch Responses StatusDescription200Reserva tras la edición (sin cambios si el cuerpo no modifica nada) (Booking)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)410Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":1988,"title":1989,"titles":1990,"content":1991,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-bookingsidcancel","POST \u002Fbookings\u002F{id}\u002Fcancel",[1964],"Cancelar Cancelar nunca se bloquea (F3-181, decisión del dueño 2026-10-09). Con etapas v2 no exige los datos de la etapa cancelada ni los ítems de la salida «cancelar»; para registrarlos, usar POST \u002Fwork-items\u002F{id}\u002Ftransitions\u002F{stage}, donde son opcionales. Cancelar una tarea principal cancela también sus tareas vinculadas que todavía no empezaron (motivo case_cancelled, F3-585); las que están en curso siguen. Para avisar antes, leer pending_ids de GET \u002Fbookings\u002F{id}\u002Fcase. Reprogramar no cancela el caso. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (optional) application\u002Fjson: object Responses StatusDescription200OK (Booking)defaultError (RFC 9457) (Problem)",{"id":1993,"title":1994,"titles":1995,"content":1996,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-bookingsidcase","GET \u002Fbookings\u002F{id}\u002Fcase",[1964],"Caso de una tarea: sus tareas vinculadas y qué las traba F3-585 (versión liviana): la tarea que reservó el cliente es el caso y sus tareas vinculadas son tareas normales. Se pide por la principal o por cualquier vinculada y devuelve lo mismo. Una tarea sin vinculadas es un caso vacío (tasks: []). Una vinculada está trabada (blocked) mientras la que la bloquea no se completó. Mismo alcance que GET \u002Fbookings\u002F{id}: staff solo pide el caso de una tarea suya (si no, 404), y entonces ve todas las vinculadas del caso. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (Case)defaultError (RFC 9457) (Problem)",{"id":1998,"title":1999,"titles":2000,"content":2001,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#put-bookingsiditems","PUT \u002Fbookings\u002F{id}\u002Fitems",[1964],"Editar los productos del pedido de una tarea (cantidades, agregar, quitar) Campo «Productos» del formulario (F3-148): reemplazo completo e idempotente de las líneas de\nintake_data.items. Cada línea del cuerpo es solo {product_id, qty}; nombre, unidad y precio unitario\n(unit_price_minor, unidad menor de la moneda) los copia el servidor del catálogo AL CREAR la línea y una\nlínea existente los conserva (cambiar el catálogo no altera pedidos). qty_requested (lo pedido) no\ncambia: una línea agregada después de crear la tarea queda con qty_requested: 0. El servidor recalcula\nitems_total y el total del formulario con la definición cotizada de la tarea. Permisos (matriz única): order:edit (owner, manager; API key con bookings:write) agrega, quita y\ncambia cantidades en tareas no cerradas (no en cancelled, expired, failed, no_show ⇒ 409\norder_not_editable). order:edit_own (staff): solo en tareas asignadas a sus recursos (si no, 404) y en\ncurso (checked_in; si no, 409 order_not_editable con reason: not_in_progress), solo cantidades\n(incluso 0) y productos que el servicio ofrece, sin quitar líneas (403 order_forbidden), y solo si el\ndueño encendió staff_can_edit_order (apagado por defecto; si no, 403). viewer ⇒ 403.Catálogo. Una línea nueva exige un producto activo, del negocio y ofrecido por el servicio\n(422 order_invalid con reason: product_unavailable) y al menos una unidad; sin productos repetidos\n(duplicate_product); rangos del campo (qty_range, lines_range, units_range); sin campo «Productos»\nen la tarea ⇒ no_items_field.Valor a cobrar. Si ya estaba congelado (due_minor), el servidor lo ajusta en la MISMA transacción\npor la diferencia del cálculo (respeta un ajuste manual previo), con motivo «cambio de pedido» y autor =\nquien editó, auditado (payment.due_adjusted); no exige payments:adjust. Si lo ya cobrado supera el\nnuevo valor ⇒ 409 order_below_paid (con paid_minor y due_minor) y no cambia nada: lo resuelve un\nmanager. Con API key, leer lo cobrado exige además payments:read_balance.Auditoría booking.order_changed con ids de producto, cantidades y totales (sin datos personales).Concurrencia. expected_version opcional: si la reserva cambió ⇒ 409 version_conflict. PATCH \u002Fbookings\u002F{id} no cambia los ítems (salvo en un hold): un intake_data con otras cantidades ⇒ 422\norder_invalid con reason: use_items_endpoint; si no trae items, se conservan los guardados. Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: OrderItemsIn Responses StatusDescription200La tarea con el pedido actualizado (sin cambios si las líneas son las mismas) (Booking)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2003,"title":2004,"titles":2005,"content":2006,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-bookingsidmessage","POST \u002Fbookings\u002F{id}\u002Fmessage",[1964],"Mensaje operativo al cliente de la tarea F3-115. Resuelve conversación y canal en el servidor y reutiliza el envío manual del Inbox: persiste una salida pending (outbox durable), deja la conversación en modo humano, crea la conversación si no existía y registra booking.message_sent en la línea de tiempo de la tarea (solo el canal, nunca el texto). Es un mensaje OPERATIVO: el opt-out de promociones no lo bloquea; la pausa de canal sí (409 no_message_channel). Idempotency-Key obligatoria (24 h para sesión de panel; una clave con otro texto u opción devuelve 422). Rate limit por usuario (429 rate_limited, por defecto 6 por minuto). Roles owner, manager y staff (solo sus tareas, si no 404); viewer 403. Scope de API key messages:write. Authentication: API key or dashboard sessionScopes: messages:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)Idempotency-KeyheaderYesstring Request body (required) application\u002Fjson: TaskMessageIn Responses StatusDescription201Persistido, pendiente de despacho durable (TaskMessageOut)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2008,"title":2009,"titles":2010,"content":2011,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-bookingsidmessage-options","GET \u002Fbookings\u002F{id}\u002Fmessage-options",[1964],"Canales por los que escribirle al cliente de la tarea F3-115. El servidor elige: la conversación vinculada a la tarea (origin), si no la última conversación del cliente, si no un canal nuevo con sus datos de contacto (WhatsApp si tiene teléfono y hay uno conectado, email si tiene email y Resend está activo). default_key es la primera opción sin bloqueo; blocked explica por qué una opción no se puede usar (pausa de canal, conexión caída, cliente de prueba). Sin opciones, unavailable_reason dice por qué. Roles owner, manager y staff (solo tareas asignadas a sus recursos, si no 404); viewer 403. Scope de API key messages:read. Authentication: API key or dashboard sessionScopes: messages:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Opciones de envío (TaskMessageOptions)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)",{"id":2013,"title":2014,"titles":2015,"content":2016,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-bookingsidreschedule","POST \u002Fbookings\u002F{id}\u002Freschedule",[1964],"Reprogramar (crea una reserva nueva y cancela la anterior) La pausa del servicio no bloquea reprogramar una tarea existente. Conserva validaciones de horario, recursos y capacidad; si falla, la tarea original queda intacta. No habilita reservas nuevas ni oferta de slots. Con etapas v2 no se bloquea por los datos de la etapa cancelada, porque cancelar nunca se bloquea (F3-181). Staff solo mueve sus turnos y solo a sus propias agendas (403 reschedule_forbidden si no). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstringIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: object Responses StatusDescription200Nueva reserva (Booking)defaultError (RFC 9457) (Problem)",{"id":2018,"title":2019,"titles":2020,"content":2021,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-bookingsidschedule","POST \u002Fbookings\u002F{id}\u002Fschedule",[1964],"Programar o cambiar ventana sin cambiar el ID Owner\u002Fmanager o API key bookings:write, CSRF para sesión. Tenant desde credencial. Clave obligatoria, operación+cuerpo con huella durable; replay no incrementa versión. expected_version stale devuelve 409 version_conflict. Tareas terminales y holds técnicos con expires_at devuelven 409 booking_not_editable. Pending scheduled no consume capacidad: schedule valida horario\u002Frequisitos\u002Frecursos\u002Fzona con el motor y sus constraints. Unschedule mantiene estado operativo, pagos\u002Fvencimientos y asignación real sin capacidad. Queue conserva contador\u002Fis_queue aunque tenga ventana; no ocupa capacidad horaria. Pausar el servicio no bloquea operaciones sobre tareas existentes; se mantienen validaciones de horario, recursos y capacidad. Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionidpathYesstringIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: ScheduleBookingIn Responses StatusDescription200Tarea actualizada o replay (Booking)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2023,"title":2024,"titles":2025,"content":2026,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-bookingsidunschedule","POST \u002Fbookings\u002F{id}\u002Funschedule",[1964],"Quitar horario conservando ejecución, pago y asignación Owner\u002Fmanager o API key bookings:write, CSRF para sesión. Tenant desde credencial. Clave obligatoria, operación+cuerpo con huella durable; replay no incrementa versión. expected_version stale devuelve 409 version_conflict. Tareas terminales y holds técnicos con expires_at devuelven 409 booking_not_editable. Pending scheduled no consume capacidad: schedule valida horario\u002Frequisitos\u002Frecursos\u002Fzona con el motor y sus constraints. Unschedule mantiene estado operativo, pagos\u002Fvencimientos y asignación real sin capacidad. Queue conserva contador\u002Fis_queue aunque tenga ventana; no ocupa capacidad horaria. Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionidpathYesstringIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: UnscheduleBookingIn Responses StatusDescription200Tarea actualizada o replay (Booking)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2028,"title":2029,"titles":2030,"content":2031,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-conversationsidwork-items","GET \u002Fconversations\u002F{id}\u002Fwork-items",[1964],"Tareas (reservas) creadas desde una conversación Las reservas cuyo origen es esta conversación (0, 1 o N), de la más reciente a la más antigua. No incluye holds sin confirmar ni vencidos. Un usuario staff solo ve las de sus recursos. Conversación inexistente, de otro workspace o (rol staff, F2-52) de un cliente sin tareas suyas: 404. API keys: scope bookings:read, solo GET (ADR 0017). Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":2033,"title":2034,"titles":2035,"content":2036,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-task-linessuggestions","GET \u002Ftask-lines\u002Fsuggestions",[1964],"Buscador de «+ Agregar»: catálogo y ítems usados antes Un solo buscador (decisión 3): productos y servicios activos del catálogo y, después, los ítems libres usados antes en el negocio (source: memory, último precio y, a quien tiene tasks:costs (por defecto el dueño), último costo; suggest_save desde el tercer uso). Permiso tasks:edit_lines; API key bookings:read. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionqqueryYesstring Responses StatusDescription200Successful Response (LineSuggestions)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2038,"title":2039,"titles":2040,"content":2041,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-work-items","GET \u002Fwork-items",[1964],"Consulta unificada de tareas Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionfeesqueryNostring all, due default allFIU-510 · Tareas-cuota de las suscripciones. all (por defecto) las lista todas. due deja solo las por cobrar vencidas o dentro de su aviso (notice_days del plan) y saca las pagadas, las perdonadas y las de cobro automático al día (vuelven si el cobro falla o no llega). Es la vista de Hoy y Trabajo del panel, de Wagy y del MCP (list_tasks). Solo filtra: no cambia montos ni estados.scheduling_statequeryNopending, scheduled, queuemin_latqueryNonumber \u002F null (null)Inclusive geographic box; supply all four bounds together, minimum \u003C= maximum.max_latqueryNonumber \u002F null (null)Inclusive geographic box; supply all four bounds together, minimum \u003C= maximum.min_lngqueryNonumber \u002F null (null)Inclusive geographic box; supply all four bounds together, minimum \u003C= maximum.max_lngqueryNonumber \u002F null (null)Inclusive geographic box; supply all four bounds together, minimum \u003C= maximum.statusqueryNostring \u002F null (null)base_statequeryNostring \u002F null (null)Estado base fijo (ADR 0023, F1-37), el que usan filtros, estadísticas y mapa: pending (held, pending_payment, confirmed), in_progress (checked_in), completed, cancelled (cancelled, expired), absent (no_show), refused (failed). No depende del nombre de la etapa.stagequeryNostring \u002F null (null)resource_idqueryNostring \u002F null (null)customer_idqueryNostring \u002F null (null)fromqueryNostring \u002F null (null)toqueryNostring \u002F null (null)created_fromqueryNostring \u002F null (null)Desde cuándo entró la tarea (created_at, incluido; F3-729). Independiente de from\u002Fto, que miran la fecha de trabajo. Con created_from o created_to no entran los holds sin concretar (held, expired), como en el conteo del uso del flujo.created_toqueryNostring \u002F null (null)Hasta cuándo entró la tarea (created_at, excluido; F3-729). Debe ser posterior a created_from (422).minequeryNoboolean \u002F null (null)Solo lo asignado a los recursos propios de quien consulta, sin lo que solo podría tomar (F3-729): el alcance own del uso de un flujo, para que el link de un día traiga lo mismo que se contó.priorityqueryNostring \u002F null (null)tagqueryNostring \u002F null (null)typequeryNostring \u002F null (null)flow_idqueryNostring \u002F null (null)Tareas de ese flujo (F3-33). Con group_by=stage, groups trae todas las etapas activas del flujo en su orden (también las vacías, con count 0), con label y position.statusesqueryNoarray\u003CBookingStatus> \u002F null (null)Tareas en alguno de esos estados (repetí el parámetro). Se combina con status; los conteos de groups, total y la paginación salen de la misma selección (F3-33).resource_idsqueryNoarray \u002F null (null)Tareas de alguno de esos recursos (repetí el parámetro), p. ej. «Mías» con varias agendas. Se combina con resource_id; un staff solo alcanza sus recursos (F3-33).fulfillment_modequeryNostring \u002F null (null)unassignedqueryNoboolean \u002F null (null)true lista solo el trabajo que nadie tiene (sin recurso asignado): el conjunto \"Sin asignar\". Un staff ve ahí lo que puede tomar (servicios cuyo grupo incluye alguno de sus recursos); false lista lo ya asignado.attentionqueryNostring \u002F null (null)Selección compartida con los contadores de Control. Sin fechas implícitas; se combina con los demás filtros mediante AND. Avisos, dirección y cobertura solo incluyen abiertas; sin zona excluye fuera de cobertura; sin asignar excluye holds asignados. Evaluaciones incluye finales.overlapqueryNoboolean default falseIncluye tareas cuya ventana cruza el rango aunque empiecen antes de from. Sin ventana usa el plazo.include_carriedqueryNoboolean default falseF3-573 (arrastre): con from\u002Fto, suma las tareas iniciadas que pasaron su fin y siguen ocupando su lugar en el rango (servicio de día completo o que no pide una persona, hasta 7 días después de su fin), aunque hayan empezado antes. Vienen con carried_over=true. Misma regla que GET \u002Fslots. Las reglas de visibilidad (staff) no cambian. Por defecto false: el listado no cambia.latequeryNoboolean \u002F null (null)true lista solo las tareas atrasadas (fechadas, en etapa no final, con el fin de la ventana más late_grace_min vencidos); false lista el resto. Combinable con las vistas, p. ej. view=today.zone_idqueryNostring \u002F null (null)Tareas de esa zona (F1-38).no_zonequeryNoboolean \u002F null (null)true lista las tareas vivas con destino que ninguna zona cubre (solo si el negocio tiene zonas): lo que aparece en \"Necesita tu atención\". false las excluye.originqueryNostring \u002F null (null)sourcequeryNostring \u002F null (null)openqueryNoboolean \u002F null (null)true lista solo las tareas abiertas (ni completed, cancelled, expired, no_show ni failed) de cualquier día; false lista solo las terminadas o canceladas. Es lo que usa «Pendientes» de Hoy.untilqueryNostring \u002F null (null)Solo con open=true: deja las tareas fechadas antes de este instante (exclusivo) y también las que no tienen fecha (por agendar, cola sin plazo). A diferencia de to, no excluye lo que no tiene fecha.qqueryNostring \u002F null (null)Búsqueda literal sin comodines sobre nombre canónico y traducciones persistidas del servicio, notas, etiquetas e ID de tareas visibles; independiente del idioma del panel.matchqueryNostring \u002F null (null)FIU-560 · Lo que filtra una vista de Trabajo (criterios v2), como JSON (WorkItemMatch, hasta 4096 caracteres): estado de selección múltiple, fecha con su campo y rango relativo, y grupos «o» (any_of). La fecha relativa se resuelve en la zona horaria del proyecto al pedir la primera página (el cursor conserva ese instante). Se combina con AND con el resto de los parámetros. Inválido: 422.order_byqueryNostring start, due, priority, created, completed default startdirectionqueryNostring asc, desc default ascgroup_byqueryNostring \u002F null (null)Conteos por grupo en groups. flow agrupa por flujo (con el nombre del flujo en label).viewqueryNostring all, inbox, today, upcoming default alllimitqueryNointeger default 25cursorqueryNostring \u002F null (null) Responses StatusDescription200Successful Response (WorkItemPage)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2043,"title":2044,"titles":2045,"content":2046,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-work-itemsid","GET \u002Fwork-items\u002F{id}",[1964],"Tarea y próximos pasos autorizados Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (Booking)defaultError (RFC 9457) (Problem)",{"id":2048,"title":2049,"titles":2050,"content":2051,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#patch-work-itemsid","PATCH \u002Fwork-items\u002F{id}",[1964],"Editar metadata de tarea Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Request body (required) application\u002Fjson: WorkItemPatch Responses StatusDescription200Successful Response (Booking)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2053,"title":2054,"titles":2055,"content":2056,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-work-itemsidjourney","GET \u002Fwork-items\u002F{id}\u002Fjourney",[1964],"Recorrido completo de una tarea con sus versiones históricas Solo equipo autorizado (tasks:read y alcance de tareas, incluido historial terminado); API key bookings:read. Eventos cronológicos sin el límite de 100 del stage-history, y mapas v2 de las versiones registradas. Nunca sustituye una versión ausente por la vigente. Sin mutaciones ni acceso mediante enlaces de cliente. Authentication: API key or dashboard sessionScopes: tasks:read, bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Eventos y versiones del flujo de esta tarea, bajo RLS del proyecto (WorkItemJourney)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2058,"title":2059,"titles":2060,"content":2061,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-work-itemsidlines","GET \u002Fwork-items\u002F{id}\u002Flines",[1964],"Ítems de la tarea, bloques del presupuesto y margen Permiso tasks:edit_lines (el viewer y el colaborador no ven dinero; staff: solo tareas asignadas a sus recursos, si no 404); API key bookings:read. margin y cost_minor solo para quien tiene tasks:costs (FIU-597: por defecto solo el dueño; API key con payments:read_balance); los demás ven solo el costo de las líneas que cargaron. awaiting_approval_minor: lo que no se cobra hasta que el cliente apruebe el presupuesto actualizado. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Successful Response (TaskLinesOut)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2063,"title":2064,"titles":2065,"content":2066,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-work-itemsidlines","POST \u002Fwork-items\u002F{id}\u002Flines",[1964],"Agregar un ítem a la tarea (del catálogo o libre) Del catálogo (product_id o service_id): nombre y precio se copian del catálogo. Libre (name,\nkind, unit_price_minor): sin producto oculto; save_to_catalog lo guarda como producto o servicio.\nSube el valor a cobrar exactamente el subtotal de la línea. Idempotente por tarea; auditado. FIU-472 (ADR 0040 §3, decisiones 1A a 5A). Exactamente uno de product_id, service_id (catálogo: nombre y precio copiados, un precio enviado se ignora) o name (ítem libre: kind y unit_price_minor obligatorios; sin producto oculto). cost_minor opcional: el cliente nunca lo ve y no entra en Dinero (solo el margen). save_to_catalog: crea el producto (o el servicio, como el de la tarea) sin que el bot lo ofrezca; exige products:write\u002Fcatalog:write (403 line_forbidden, reason: catalog_forbidden). Sube el valor a cobrar exactamente el subtotal de la línea (motivo «ítems de la tarea»); con un presupuesto aceptado, nace el actualizado para aprobar. Permiso tasks:edit_lines; API key bookings:write. Idempotente por tarea (Idempotency-Key; otro cuerpo con la misma clave: 422 idempotency_conflict; un reintento responde 200 con replay: true). Auditada (booking.line_added). Errores: 404; 409 line_not_editable (reason: status, completed, covered_by_plan, due_negative), version_conflict; 422 line_invalid (reason: product_unavailable, service_unavailable, lines_range, catalog_duplicate, catalog_service_needs_team). Authentication: API key or dashboard sessionScopes: products:write, catalog:write, bookings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)Idempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: LineAddIn Responses StatusDescription201Successful Response (TaskLinesOut)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2068,"title":2069,"titles":2070,"content":2071,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#patch-work-itemsidlinesline_id","PATCH \u002Fwork-items\u002F{id}\u002Flines\u002F{line_id}",[1964],"Editar un ítem de la tarea De una línea del catálogo cambian la cantidad y el costo (otro campo: 422 line_invalid, reason: catalog_line_fixed); de una libre, también nombre, tipo, unidad y precio. cost_minor: null borra el costo. Mueve el valor a cobrar la diferencia; si lo ya cobrado quedaría por encima, 409 order_below_paid y nada cambia. Staff: solo las líneas que cargó (403 line_forbidden, reason: not_own_line). Idempotente; auditada (booking.line_changed). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)line_idpathYesstring (uuid)Idempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: LineEditIn Responses StatusDescription200Successful Response (TaskLinesOut)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2073,"title":2074,"titles":2075,"content":2076,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#delete-work-itemsidlinesline_id","DELETE \u002Fwork-items\u002F{id}\u002Flines\u002F{line_id}",[1964],"Quitar un ítem de la tarea Baja el valor a cobrar el subtotal de la línea; si lo ya cobrado quedaría por encima, 409. Baja el valor a cobrar el subtotal de la línea; si lo ya cobrado quedaría por encima, 409 order_below_paid (paid_minor, due_minor) y nada cambia. Idempotente; auditada (booking.line_removed). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)line_idpathYesstring (uuid)expected_versionqueryNointeger \u002F null (null)Idempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Responses StatusDescription200Successful Response (TaskLinesOut)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2078,"title":2079,"titles":2080,"content":2081,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-work-itemsidofferskey","POST \u002Fwork-items\u002F{id}\u002Foffers\u002F{key}",[1964],"Aceptar una oferta de la etapa actual («Ofrecer…») F3-461 (ADR 0040 §3). Acepta el ítem offer key de la etapa actual de la tarea (visible al equipo). product: suma la línea a esta tarea con nombre, unidad y precio copiados del catálogo (un precio enviado se ignora) y sube su valor a cobrar (ajuste con motivo «oferta aceptada»; en una tarea con «Productos» en el formulario, el mismo recálculo que PUT \u002Fbookings\u002F{id}\u002Fitems). service: crea otra tarea independiente de ese servicio para el mismo cliente (origin.type: offer, origin.booking_id); si el servicio tiene horario, nace por agendar (pending_schedule) y se agenda con POST \u002Fbookings\u002F{id}\u002Fschedule. plan (F3-463): vende el plan al cliente de la tarea con la venta del panel (además prepaid:sell; sin él, 403 offer_forbidden con reason: prepaid_sell): nace la suscripción con su cuota 1, el alta, Por cobrar (created_work_item, origin.type: offer); un plan que ya no se puede vender da 422 offer_item_unavailable con el motivo de prepaid. Sin cascadas: cancelar una de las dos tareas no toca la otra. Idempotente por tarea con Idempotency-Key (otro cuerpo con la misma clave: 422 idempotency_conflict). Auditada (booking.offer_accepted, con la etapa y la clave del ítem). Permiso tasks:accept_offer (owner, manager y staff en tareas asignadas a sus recursos, solo con «El repartidor puede modificar el pedido» encendido: si no, 403 offer_forbidden); API key con bookings:write. Un servicio con ficha obligatoria pide intake_data (si falta, 422 invalid_intake). Errores: 404 offer_not_found; 409 offer_not_available (reason: status, kind, covered_by_plan); 422 offer_item_unavailable (reason: item_required, not_offered, qty_range, intake_not_allowed, qty_not_allowed). Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)keypathYesstringIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: OfferAcceptIn Responses StatusDescription200La tarea (con lo sumado), la tarea que nació (si el ítem ofrece un servicio o un plan) y el registro (OfferAcceptResult)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2083,"title":2084,"titles":2085,"content":2086,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-work-itemsidquote","GET \u002Fwork-items\u002F{id}\u002Fquote",[1964],"Presupuesto de la tarea: lo de ahora y sus revisiones Los bloques de ahora (Mano de obra \u002F Servicios y Materiales \u002F Productos, con subtotales que suman el valor a cobrar) y las revisiones del presupuesto. Permiso tasks:edit_lines; API key bookings:read. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Successful Response (QuotesOut)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2088,"title":2089,"titles":2090,"content":2091,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-work-itemsidquote","POST \u002Fwork-items\u002F{id}\u002Fquote",[1964],"Mandar el presupuesto al cliente El cliente lo recibe por su canal, en dos bloques con subtotales. Queda esperando su respuesta. Decisión 5A. Crea una revisión pending con los bloques de ahora (sin costos) y la manda al cliente por su canal (aviso transaccional task_quote, que se relee antes de salir). La pendiente anterior queda superseded. Idempotente con Idempotency-Key (200 replay: true). 409 quote_not_sendable (reason: status, internal_task). Permiso tasks:edit_lines; API key bookings:write. Auditada (booking.quote_sent). Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)Idempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Responses StatusDescription201Successful Response (QuoteResult)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2093,"title":2094,"titles":2095,"content":2096,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-work-itemsidquoterevisiondecision","POST \u002Fwork-items\u002F{id}\u002Fquote\u002F{revision}\u002Fdecision",[1964],"Registrar la respuesta del cliente al presupuesto Aprobado: lo aprobado pasa a ser este total y la diferencia ya se puede cobrar. Rechazado: la\ndiferencia sigue sin cobrarse hasta que el equipo corrija y el cliente apruebe otra revisión. Registra la respuesta del cliente a la revisión pendiente (via: customer_channel, in_person, phone). Aprobada: su total pasa a ser lo aprobado y la diferencia ya se cobra; mientras haya una revisión pendiente después de una aprobada, la parte del valor a cobrar por encima de lo aprobado no sale por link, QR, Point ni tarjeta, ni se imputa un cobro manual (409 payment.quote_pending); rechazar la revisión tampoco libera la diferencia. Repetir la misma respuesta no cambia nada; 409 quote_not_pending si la revisión ya no espera respuesta. Auditada (booking.quote_accepted \u002F booking.quote_rejected). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)revisionpathYesinteger Request body (required) application\u002Fjson: QuoteDecisionIn Responses StatusDescription200Successful Response (QuoteResult)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2098,"title":2099,"titles":2100,"content":2101,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-work-itemsidreopen","POST \u002Fwork-items\u002F{id}\u002Freopen",[1964],"Reabrir una tarea completada, cancelada o ausente Permiso tasks:reopen (owner\u002Fmanager); API key con bookings:write y creador que siga siendo miembro activo owner\u002Fmanager con tasks:reopen en cada llamada y replay (también MCP); degradado o sin membership responde 403. Motivo obligatorio. Restaura la última etapa activa anterior o su canónica; conserva cobros y seña retenida; no_show no es deuda, al reabrir vuelve a la clasificación de deuda según estado activo\u002Ffecha. Recupera capacidad en la misma transacción (exclusive, pooled, queue). Si ya no hay lugar responde 409 reopen_requires_reschedule: elegir un nuevo start y, opcionalmente, resource_ids y confirmar nuevamente con otra clave; se conserva la misma tarea y sus cobros. Una cancelada con reemplazo por reprogramación no se puede reabrir (409 invalid_transition). Idempotency-Key obligatorio: replay idéntico, otra operación con la misma clave da 409. Historial y auditoría incluyen motivo; workitem.reopened no incluye texto libre. No ejecuta efectos de cierre ni notificaciones de etapa. Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)Idempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: ReopenIn Responses StatusDescription200Tarea reabierta (o respuesta original en replay) (WorkItemActionResult)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2103,"title":2104,"titles":2105,"content":2106,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-work-itemsidstage-history","GET \u002Fwork-items\u002F{id}\u002Fstage-history",[1964],"Historial inmutable de etapas Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)orderqueryNostring asc, desc default descOrden de los últimos 100 eventos; asc los presenta cronológicamente. Responses StatusDescription200Últimos 100 eventos con actor, origen, clase e ítems históricos; orden elegido (object)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2108,"title":2109,"titles":2110,"content":2111,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-work-itemsidtoolstool","POST \u002Fwork-items\u002F{id}\u002Ftools\u002F{tool}",[1964],"Usar herramienta de la etapa actual F3-183. Lock, idempotencia, autorización y requisitos. Mutación, cobro, historial y outbox atómicos. Scope bookings:write; payments:record si cobra. Falta de requisitos: 422 stage_requirements_missing. Un dato que vino pero no vale (tipo, formato, rango, opción, campo calculado o ya cargado): 422 stage_field_invalid con invalid (F3-482). No ejecuta charge electrónico (F4-29 pendiente). Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)toolpathYesstringIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: WorkItemOperationInput Responses StatusDescription200La tarea tras los efectos de servidor y los efectos de cliente (WorkItemActionResult)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2113,"title":2114,"titles":2115,"content":2116,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#post-work-itemsidtransitionsto_stage","POST \u002Fwork-items\u002F{id}\u002Ftransitions\u002F{to_stage}",[1964],"Entrar a una etapa del servicio F3-183. Lock, idempotencia, autorización y requisitos. Mutación, cobro, historial y outbox atómicos. Scope bookings:write; payments:record si cobra. Falta de requisitos: 422 stage_requirements_missing. Un dato que vino pero no vale (tipo, formato, rango, opción, campo calculado o ya cargado): 422 stage_field_invalid con invalid (F3-482). No ejecuta charge electrónico (F4-29 pendiente). Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)to_stagepathYesstringIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: WorkItemOperationInput Responses StatusDescription200La tarea tras los efectos de servidor y los efectos de cliente (WorkItemActionResult)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2118,"title":2119,"titles":2120,"content":2121,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbookings#get-work-itemsstream","GET \u002Fwork-items\u002Fstream",[1964],"Avisos en vivo de tareas (SSE) text\u002Fevent-stream del proyecto. Eventos work_item.created, work_item.updated (etapa, estado, asignación, horario, pago u otro dato) y work_item.deleted con {event, id}, sin contenido: el cliente vuelve a pedir GET \u002Fv1\u002Fwork-items. Se publican después del commit. Un comentario : cada 15 s mantiene la conexión. Mismos roles que GET \u002Fv1\u002Fwork-items (API key: bookings:read; Mini App: header X-Miniapp-Session). Un cobro, su anulación o una devolución avisan work_item.updated de las tareas que pagan. Rol staff sin gestión: solo recibe avisos de las tareas que ve en ese momento o que ya vio en este stream (al abrirlo o por un aviso anterior); cuando deja de verla (reasignada, tomada por otro) o se borra, recibe un aviso con ese id y nunca el id de una tarea que no pudo ver, tampoco en las bajas. El stream se corta si la sesión se cierra o cambia el rol. Authentication: API key or dashboard sessionScopes: bookings:read Responses StatusDescription200Stream abierto403Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2123,"title":2124,"titles":2125,"content":2126,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fbooking-series","API · booking-series",[],"booking-series operations in the OpenAPI contract that accept an API key. Turnos fijos (F3-620): reservas que se repiten cada 1-4 semanas. Cada fecha es una tarea normal.",{"id":2128,"title":2129,"titles":2130,"content":2131,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbooking-series#get-booking-series","GET \u002Fbooking-series",[2124],"Listar turnos fijos Turnos fijos (F3-620): reservas que se repiten. Owner y manager (permiso tasks:series); API key con bookings:read. Sin dates (están en el detalle). Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptioncustomer_idqueryNostring (uuid)statusqueryNostring active, cancelledlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":2133,"title":2134,"titles":2135,"content":2136,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbooking-series#post-booking-series","POST \u002Fbooking-series",[2124],"Crear un turno fijo (y sus próximas fechas) Crea la serie y materializa como tareas normales las fechas de las próximas 8 semanas (el resto lo suma un proceso periódico). Cada fecha pasa por las mismas reglas que una reserva: disponibilidad, capacidad, feriados, excepciones y cierres; el precio lo fija el servidor al crear cada fecha y se cobra el día de esa tarea (no se pide seña por adelantado). Si alguna fecha no entra responde 409 series_conflicts con conflicts: [{date, start, reasons}], salvo que esté en skip_dates o se pida skip_conflicts: quedan registradas como salteadas. La confirmación al cliente sale solo con la primera fecha. Owner y manager; API key con bookings:write. Authentication: API key or dashboard sessionScopes: bookings:write Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: BookingSeriesInput Responses StatusDescription201Creado (BookingSeries)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2138,"title":2139,"titles":2140,"content":2141,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbooking-series#get-booking-seriesid","GET \u002Fbooking-series\u002F{id}",[2124],"Leer un turno fijo y sus fechas Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (BookingSeries)defaultError (RFC 9457) (Problem)",{"id":2143,"title":2144,"titles":2145,"content":2146,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbooking-series#patch-booking-seriesid","PATCH \u002Fbooking-series\u002F{id}",[2124],"Editar toda la serie o «esta y las siguientes» (con from_date) Sin from_date: toda la serie. Con from_date posterior al inicio: «esta y las siguientes», que parte la serie (la original termina el día anterior y la respuesta es la serie nueva, con split_from_id). Las fechas futuras que todavía se pueden mover (no iniciadas, sin cobro, sin falta) se cancelan sin aviso y se vuelven a crear con la regla nueva; lo pasado, iniciado, cobrado o con falta no se toca. Cambiar solo la nota o el fin no mueve las fechas existentes. Mismos choques que el alta (409 series_conflicts, skip_dates, skip_conflicts); expected_version da 409 version_conflict si la serie cambió. «Solo esta» es reprogramar o cancelar esa tarea (\u002Fbookings\u002F{id}\u002F…). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: BookingSeriesPatch Responses StatusDescription200OK (BookingSeries)409Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2148,"title":2149,"titles":2150,"content":2151,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbooking-series#post-booking-seriesidcancel","POST \u002Fbooking-series\u002F{id}\u002Fcancel",[2124],"Cancelar el turno fijo (todo o desde una fecha) Sin from_date (o desde el inicio) cancela la serie; con from_date la serie termina el día anterior. Las fechas futuras que se pueden mover se cancelan sin aviso al cliente; lo pasado, iniciado, cobrado o con falta queda como está. Cancelar algo ya cancelado devuelve lo mismo. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (optional) application\u002Fjson: object Responses StatusDescription200OK (BookingSeries)defaultError (RFC 9457) (Problem)",{"id":2153,"title":2154,"titles":2155,"content":2156,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbooking-series#post-booking-seriespreview","POST \u002Fbooking-series\u002Fpreview",[2124],"Vista previa de las fechas y sus choques (no guarda) Las fechas de las próximas 8 semanas con status ok, conflict (con reasons) o skipped (pedidas en skip_dates). Usa exactamente las reglas del alta y no guarda nada. Authentication: API key or dashboard sessionScopes: None Request body (required) application\u002Fjson: BookingSeriesInput Responses StatusDescription200OK (BookingSeriesPreview)defaultError (RFC 9457) (Problem)",{"id":2158,"title":2159,"titles":2160,"content":2161,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog","API · catalog",[],"catalog operations in the OpenAPI contract that accept an API key.",{"id":2163,"title":2164,"titles":2165,"content":2166,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-resource-groups","GET \u002Fresource-groups",[2159],"Listar grupos de recursos Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioninclude_inactivequeryNoboolean default falseIncluye los desactivados (active=false). Por defecto solo los activos.archivedqueryNoboolean default falseFIU-485 — lista solo los archivados («Archivados»). Los archivados no salen en las demás listas. Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":2168,"title":2169,"titles":2170,"content":2171,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-resource-groups","POST \u002Fresource-groups",[2159],"Crear grupo de recursos (config:write) Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: ResourceGroup Responses StatusDescription201Creado (ResourceGroup)defaultError (RFC 9457) (Problem)",{"id":2173,"title":2174,"titles":2175,"content":2176,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-resource-groupsid","GET \u002Fresource-groups\u002F{id}",[2159],"Leer un grupo de recursos (activo o no) Un elemento desactivado se lee igual, con active=false, para mostrar su detalle y reactivarlo (PATCH con active=true). 404 solo si no existe en el proyecto. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (ResourceGroup)defaultError (RFC 9457) (Problem)",{"id":2178,"title":2179,"titles":2180,"content":2181,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#patch-resource-groupsid","PATCH \u002Fresource-groups\u002F{id}",[2159],"Editar grupo y miembros (owner\u002Fmanager o API key config:write) F3-573 — sumar una persona (recurso staff) al grupo de un servicio de día completo responde 422 service_full_day_invalid. FIU-450 — al enviar member_ids, se ignoran y limpian los ids inexistentes o inactivos, sin 404. Las reservas de esos miembros se conservan y no bloquean la limpieza; quitar una persona activa con ocupación vigente sigue respondiendo 409 team_policy_in_use. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: ResourceGroupPatch Responses StatusDescription200Actualizado (ResourceGroup)defaultError (RFC 9457) (Problem)",{"id":2183,"title":2184,"titles":2185,"content":2186,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#delete-resource-groupsid","DELETE \u002Fresource-groups\u002F{id}",[2159],"Baja lógica del grupo (owner\u002Fmanager, CSRF) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstringmodequeryNostring pause, remove, archive, delete default pausepause (por defecto): pausa, como siempre. remove: borra si no tiene historial y archiva si lo tiene. archive: archiva siempre. delete: borra (409 catalog_item_has_history si tiene historial). Con tareas futuras remove, archive y delete responden 409 catalog_item_future_bookings y la lista. Responses StatusDescription200Baja idempotente, conserva miembros e historial (CatalogDeactivation)defaultError (RFC 9457) (Problem)",{"id":2188,"title":2189,"titles":2190,"content":2191,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-resource-groupsidremoval","GET \u002Fresource-groups\u002F{id}\u002Fremoval",[2159],"Qué pasa al eliminar el grupo (borra o archiva; tareas futuras) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (CatalogRemovalPlan)defaultError (RFC 9457) (Problem)",{"id":2193,"title":2194,"titles":2195,"content":2196,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-resource-groupsidrestore","POST \u002Fresource-groups\u002F{id}\u002Frestore",[2159],"Restaurar el grupo archivado (vuelve pausado; se reactiva a propósito) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription204RestauradodefaultError (RFC 9457) (Problem)",{"id":2198,"title":2199,"titles":2200,"content":2201,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-resources","GET \u002Fresources",[2159],"Listar recursos (barberos, mesas, máquinas, salas…) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionkindqueryNoResourceKindinclude_inactivequeryNoboolean default falseIncluye los desactivados (active=false). Por defecto solo los activos.archivedqueryNoboolean default falseFIU-485 — lista solo los archivados («Archivados»). Los archivados no salen en las demás listas. Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":2203,"title":2204,"titles":2205,"content":2206,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-resources","POST \u002Fresources",[2159],"Crear recurso (config:write) F4-71 — 409 resource_limit_reached (con limit, used, plan y upgrade_path) si el plan no admite otro recurso activo. Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: ResourceCreate Responses StatusDescription201Creado (Resource)defaultError (RFC 9457) (Problem)",{"id":2208,"title":2209,"titles":2210,"content":2211,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-resourcesid","GET \u002Fresources\u002F{id}",[2159],"Leer un recurso (activo o no) Un elemento desactivado se lee igual, con active=false, para mostrar su detalle y reactivarlo (PATCH con active=true). 404 solo si no existe en el proyecto. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (Resource)defaultError (RFC 9457) (Problem)",{"id":2213,"title":2214,"titles":2215,"content":2216,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#patch-resourcesid","PATCH \u002Fresources\u002F{id}",[2159],"Editar recurso y asociar o quitar horario (owner\u002Fmanager o API key config:write) F4-71 — reactivar (active true) responde 409 resource_limit_reached si el plan no admite otro recurso activo. FIU-370 — capacity_mode y capacity_units ya no se editan acá, los define el equipo (422 capacity_defined_by_team). F3-573 — pasar a kind staff un recurso del grupo de un servicio de día completo responde 422 service_full_day_invalid. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: ResourcePatch Responses StatusDescription200Actualizado (Resource)defaultError (RFC 9457) (Problem)",{"id":2218,"title":2219,"titles":2220,"content":2221,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#delete-resourcesid","DELETE \u002Fresources\u002F{id}",[2159],"Baja lógica del recurso (owner\u002Fmanager, CSRF) Retira al recurso de todos sus equipos en la misma transacción, incluso si el modo remove o archive lo archiva. Conserva las reservas, sus asignaciones y el historial; reactivar el recurso no restaura esas membresías. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstringmodequeryNostring pause, remove, archive, delete default pausepause (por defecto): pausa, como siempre. remove: borra si no tiene historial y archiva si lo tiene. archive: archiva siempre. delete: borra (409 catalog_item_has_history si tiene historial). Con tareas futuras remove, archive y delete responden 409 catalog_item_future_bookings y la lista. Responses StatusDescription200Baja idempotente, conserva historial y reservas (CatalogDeactivation)defaultError (RFC 9457) (Problem)",{"id":2223,"title":2224,"titles":2225,"content":2226,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-resourcesidremoval","GET \u002Fresources\u002F{id}\u002Fremoval",[2159],"Qué pasa al eliminar el recurso (borra o archiva; tareas futuras) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (CatalogRemovalPlan)defaultError (RFC 9457) (Problem)",{"id":2228,"title":2229,"titles":2230,"content":2231,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-resourcesidrestore","POST \u002Fresources\u002F{id}\u002Frestore",[2159],"Restaurar el recurso archivado (vuelve pausado; se reactiva a propósito) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription204RestauradodefaultError (RFC 9457) (Problem)",{"id":2233,"title":2234,"titles":2235,"content":2236,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-schedule-overrides","GET \u002Fschedule-overrides",[2159],"Excepciones del workspace en un rango local (fin exclusivo) Acepta fechas o instantes con offset; los instantes se convierten a la zona del workspace. Staff solo ve horarios de sus recursos. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionfromqueryYesstring \u002F stringtoqueryYesstring \u002F string Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":2238,"title":2239,"titles":2240,"content":2241,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-schedules","GET \u002Fschedules",[2159],"Listar horarios Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":2243,"title":2244,"titles":2245,"content":2246,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-schedules","POST \u002Fschedules",[2159],"Crear horario semanal (config:write) Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: Schedule Responses StatusDescription201Creado (Schedule)defaultError (RFC 9457) (Problem)",{"id":2248,"title":2249,"titles":2250,"content":2251,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-schedulesid","GET \u002Fschedules\u002F{id}",[2159],"Leer horario del workspace (staff limitado a sus recursos) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (Schedule)defaultError (RFC 9457) (Problem)",{"id":2253,"title":2254,"titles":2255,"content":2256,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#patch-schedulesid","PATCH \u002Fschedules\u002F{id}",[2159],"Editar horario semanal (owner\u002Fmanager, CSRF) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: SchedulePatch Responses StatusDescription200Actualizado; nunca reinterpreta las reservas UTC (Schedule)defaultError (RFC 9457) (Problem)",{"id":2258,"title":2259,"titles":2260,"content":2261,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#delete-schedulesid","DELETE \u002Fschedules\u002F{id}",[2159],"Baja lógica del horario (owner\u002Fmanager, CSRF) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200Baja idempotente, conserva excepciones e historial (CatalogDeactivation)defaultError (RFC 9457) (Problem)",{"id":2263,"title":2264,"titles":2265,"content":2266,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-schedulesidoverrides","POST \u002Fschedules\u002F{id}\u002Foverrides",[2159],"Bloquear o cambiar horario en una fecha La excepción reemplaza las aperturas de esa fecha, incluida su noche hacia el día siguiente (F3-503). Cerrar una fecha no corta la madrugada que pertenece a la noche del día anterior. Los tramos siguen la regla de Schedule.rules; pisar la noche del día anterior o la apertura del siguiente responde 422 hours_overlap. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: object Responses StatusDescription201CreadodefaultError (RFC 9457) (Problem)",{"id":2268,"title":2269,"titles":2270,"content":2271,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#delete-schedulesidoverridesdate","DELETE \u002Fschedules\u002F{id}\u002Foverrides\u002F{date}",[2159],"Eliminar excepción de horario (owner\u002Fmanager, CSRF, auditado e idempotente) Volver a la semana no puede pisar la noche de una excepción vecina (422 hours_overlap, F3-503). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstringdatepathYesstring (date) Responses StatusDescription204Eliminada o ya ausente; conserva reservas y asignacionesdefaultError (RFC 9457) (Problem)",{"id":2273,"title":2274,"titles":2275,"content":2276,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-services","GET \u002Fservices",[2159],"Listar servicios Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioninclude_inactivequeryNoboolean default falseIncluye los desactivados (active=false). Por defecto solo los activos.archivedqueryNoboolean default falseFIU-485 — lista solo los archivados («Archivados»). Los archivados no salen en las demás listas. Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":2278,"title":2279,"titles":2280,"content":2281,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-services","POST \u002Fservices",[2159],"Crear servicio (config:write) Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: ServiceCreate Responses StatusDescription201Creado (Service)defaultError (RFC 9457) (Problem)",{"id":2283,"title":2284,"titles":2285,"content":2286,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-servicesid","GET \u002Fservices\u002F{id}",[2159],"Leer un servicio (activo o no) Un elemento desactivado se lee igual, con active=false, para mostrar su detalle y reactivarlo (PATCH con active=true). 404 solo si no existe en el proyecto. Authentication: API key or dashboard sessionScopes: config:read Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (Service)defaultError (RFC 9457) (Problem)",{"id":2288,"title":2289,"titles":2290,"content":2291,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#patch-servicesid","PATCH \u002Fservices\u002F{id}",[2159],"Editar servicio (owner\u002Fmanager, CSRF) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: ServicePatch Responses StatusDescription200Actualizado; las reservas existentes no se reinterpretan (Service)defaultError (RFC 9457) (Problem)",{"id":2293,"title":2294,"titles":2295,"content":2296,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#delete-servicesid","DELETE \u002Fservices\u002F{id}",[2159],"Baja lógica; conserva y lista reservas activas futuras (owner\u002Fmanager, CSRF) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstringmodequeryNostring pause, remove, archive, delete default pausepause (por defecto): pausa, como siempre. remove: borra si no tiene historial y archiva si lo tiene. archive: archiva siempre. delete: borra (409 catalog_item_has_history si tiene historial). Con tareas futuras remove, archive y delete responden 409 catalog_item_future_bookings y la lista. Responses StatusDescription200Baja idempotente, ninguna reserva cancelada (CatalogDeactivation)defaultError (RFC 9457) (Problem)",{"id":2298,"title":2299,"titles":2300,"content":2301,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-servicesidduplicate","POST \u002Fservices\u002F{id}\u002Fduplicate",[2159],"Crear una copia pausada de un servicio (config:write) Copia configuración, requisitos, formulario, productos y horario independiente. No copia tareas, resultados ni opiniones. Etapas vigentes sólo con service_stages:write (settings:write para API keys); de lo contrario usa etapas base y avisa. Idempotencia de 24 horas. Authentication: API key or dashboard sessionScopes: config:write, settings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)Idempotency-KeyheaderYesstring Responses StatusDescription201Copia pausada (ServiceDuplicateOut)defaultError (RFC 9457) (Problem)",{"id":2303,"title":2304,"titles":2305,"content":2306,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-servicesidpauses","GET \u002Fservices\u002F{id}\u002Fpauses",[2159],"Listar las pausas por fechas de un servicio (config:read) Rangos de días (inclusive) en que el servicio no se ofrece. Una pausa cierra el servicio, no a los recursos que lo atienden (F3-320). Authentication: API key or dashboard sessionScopes: config:read Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":2308,"title":2309,"titles":2310,"content":2311,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-servicesidpauses","POST \u002Fservices\u002F{id}\u002Fpauses",[2159],"Pausar un servicio por un rango de fechas (owner\u002Fmanager, CSRF) Cierra el servicio de from a to (inclusive, fecha local del negocio) sin bloquear a los recursos que lo atienden. Los demás servicios de esos recursos conservan sus horarios. Un servicio sin ventana propia sigue mostrándose sin ella (schedule_id nulo); si la ventana la comparten otros servicios o recursos, el servicio recibe una propia. Un cierre nuevo reemplaza lo que hubiera esos días. 422 invalid_schedule_override si to es anterior a from o el rango pasa de 366 días. Devuelve todas las pausas del servicio. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: ServicePauseIn Responses StatusDescription201Pausas del servicio (object)defaultError (RFC 9457) (Problem)",{"id":2313,"title":2314,"titles":2315,"content":2316,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#delete-servicesidpauses","DELETE \u002Fservices\u002F{id}\u002Fpauses",[2159],"Reabrir un servicio pausado por fechas (owner\u002Fmanager, CSRF) Reabre los días from..to (inclusive) cerrados por pausa; los horarios vuelven a ser los de antes. Si era la última pausa de una ventana generada, el servicio queda sin ventana propia. Idempotente. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstringfromqueryYesstring (date)toqueryYesstring (date) Responses StatusDescription204ReabiertodefaultError (RFC 9457) (Problem)",{"id":2318,"title":2319,"titles":2320,"content":2321,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#get-servicesidremoval","GET \u002Fservices\u002F{id}\u002Fremoval",[2159],"Qué pasa al eliminar el servicio (borra o archiva; tareas futuras) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (CatalogRemovalPlan)defaultError (RFC 9457) (Problem)",{"id":2323,"title":2324,"titles":2325,"content":2326,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-servicesidrestore","POST \u002Fservices\u002F{id}\u002Frestore",[2159],"Restaurar el servicio archivado (vuelve pausado; se reactiva a propósito) Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription204RestauradodefaultError (RFC 9457) (Problem)",{"id":2328,"title":2329,"titles":2330,"content":2331,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-servicesimportidconfirm","POST \u002Fservices\u002Fimport\u002F{id}\u002Fconfirm",[2159],"Confirmar una importación de servicios Scope config:write. Crea todos los servicios de la vista previa o ninguno. Confirmar el mismo id es idempotente (resultado 7 días). 409 services.import_preview_stale si cambió el catálogo, la moneda o venció la vista previa; 404 si es de otro negocio. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Successful Response (ServiceImportResult)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2333,"title":2334,"titles":2335,"content":2336,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-servicesimportidundo","POST \u002Fservices\u002Fimport\u002F{id}\u002Fundo",[2159],"Deshacer una importación de servicios Scope config:write. Borra los servicios creados (o los archiva si ya tienen historial), hasta 7 días y solo si nadie los cambió (409 services.import_undo_stale); con tareas futuras, 409 catalog_item_future_bookings. Repetirlo devuelve el mismo resultado. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Successful Response (ServiceImportResult)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2338,"title":2339,"titles":2340,"content":2341,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-servicesimportpreview","POST \u002Fservices\u002Fimport\u002Fpreview",[2159],"Validar una importación de servicios (vista previa, no crea nada) Scope config:write. csv, xlsx (base64, hasta 1 MiB) o rows (hasta 2000) con columns (encabezado → name|duration_min|price|team|full_day|bot_offered); hasta 200 servicios. Solo crea: un nombre que ya existe es error de la fila (services.import_exists). team es el nombre o id del equipo (con uno solo activo, se puede omitir). price en moneda mayor con la regla única de montos. Nada se crea hasta confirmar; la vista previa válida dura 30 minutos. Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: ServiceImportInput Responses StatusDescription200Successful Response (ServiceImportPreview)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2343,"title":2344,"titles":2345,"content":2346,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcatalog#post-servicesintakepreview","POST \u002Fservices\u002Fintake\u002Fpreview",[2159],"Preview Intake Vista previa de formulario y expresiones CEL acotadas. Owner\u002Fmanager o API key config:write. El servidor calcula; no persiste datos. Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: IntakePreviewIn Responses StatusDescription200Successful Response (IntakePreviewOut)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2348,"title":2349,"titles":2350,"content":2351,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts","API · products",[],"products operations in the OpenAPI contract that accept an API key. Catálogo de productos del negocio (F3-145).",{"id":2353,"title":2354,"titles":2355,"content":2356,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#get-products","GET \u002Fproducts",[2349],"Buscar productos del negocio Scope products:read. Tenant desde credencial. Importes en unidad menor ({PYG:0, CLP:0, resto:2}); no price_cents de servicios. Owner\u002Fmanager gestionan; staff lee activos ofrecidos por service_id. Archivar = PATCH active=false; no hay DELETE. Importación y exportación CSV: \u002Fproducts\u002Fimport\u002F* y \u002Fproducts\u002Fexport. Authentication: API key or dashboard sessionScopes: products:read Parameters NameInRequiredTypeDescriptionqqueryNostring default ``categoryqueryNostring \u002F null (null)activequeryNoboolean \u002F null (null) default truefeaturedqueryNoboolean default falseinclude_archivedqueryNoboolean default falsearchivedqueryNoboolean default falseFIU-485 — lista solo los archivados («Archivados»). Los archivados no salen en las demás listas.idsqueryNoarray \u002F null (null)service_idqueryNostring \u002F null (null)cursorqueryNostring \u002F null (null)limitqueryNointeger default 25 Responses StatusDescription200Successful Response (ProductPage)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2358,"title":2359,"titles":2360,"content":2361,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#post-products","POST \u002Fproducts",[2349],"Crear producto del negocio Scope products:write. Tenant desde credencial. Importes en unidad menor ({PYG:0, CLP:0, resto:2}); no price_cents de servicios. Owner\u002Fmanager gestionan; staff lee activos ofrecidos por service_id. Archivar = PATCH active=false; no hay DELETE. Importación y exportación CSV: \u002Fproducts\u002Fimport\u002F* y \u002Fproducts\u002Fexport. Authentication: API key or dashboard sessionScopes: products:write Request body (required) application\u002Fjson: ProductIn Responses StatusDescription201Successful Response (ProductOut)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2363,"title":2364,"titles":2365,"content":2366,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#get-productsid","GET \u002Fproducts\u002F{id}",[2349],"Ver producto del negocio Scope products:read. Tenant desde credencial. Importes en unidad menor ({PYG:0, CLP:0, resto:2}); no price_cents de servicios. Owner\u002Fmanager gestionan; staff lee activos ofrecidos por service_id. Pausar = PATCH active=false; eliminar = DELETE (borra sin historial, archiva con historial; FIU-485). Importación y exportación CSV: \u002Fproducts\u002Fimport\u002F* y \u002Fproducts\u002Fexport. Authentication: API key or dashboard sessionScopes: products:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)service_idqueryNostring \u002F null (null) Responses StatusDescription200Successful Response (ProductOut)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2368,"title":2369,"titles":2370,"content":2371,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#patch-productsid","PATCH \u002Fproducts\u002F{id}",[2349],"Editar o archivar producto del negocio Scope products:write. Tenant desde credencial. Importes en unidad menor ({PYG:0, CLP:0, resto:2}); no price_cents de servicios. Owner\u002Fmanager gestionan; staff lee activos ofrecidos por service_id. Pausar = PATCH active=false; eliminar = DELETE (borra sin historial, archiva con historial; FIU-485). Importación y exportación CSV: \u002Fproducts\u002Fimport\u002F* y \u002Fproducts\u002Fexport. Authentication: API key or dashboard sessionScopes: products:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Request body (required) application\u002Fjson: ProductPatch Responses StatusDescription200Successful Response (ProductOut)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2373,"title":2374,"titles":2375,"content":2376,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#delete-productsid","DELETE \u002Fproducts\u002F{id}",[2349],"Eliminar producto (borra sin historial, archiva con historial) mode=remove (por defecto) borra si ninguna tarea ni regla lo usa y archiva si hay historial; archive archiva siempre; delete borra o responde 409 catalog_item_has_history. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)modequeryNostring remove, archive, delete default remove Responses StatusDescription200OK (CatalogDeactivation)defaultError (RFC 9457) (Problem)",{"id":2378,"title":2379,"titles":2380,"content":2381,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#get-productsidremoval","GET \u002Fproducts\u002F{id}\u002Fremoval",[2349],"Qué pasa al eliminar el producto (borra o archiva; tareas futuras) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200OK (CatalogRemovalPlan)defaultError (RFC 9457) (Problem)",{"id":2383,"title":2384,"titles":2385,"content":2386,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#post-productsidrestore","POST \u002Fproducts\u002F{id}\u002Frestore",[2349],"Restaurar el producto archivado (vuelve pausado; se reactiva a propósito) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription204RestauradodefaultError (RFC 9457) (Problem)",{"id":2388,"title":2389,"titles":2390,"content":2391,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#get-productscategories","GET \u002Fproducts\u002Fcategories",[2349],"Categorías del catálogo Gestión del catálogo (permiso products:manage_read, owner\u002Fmanager). Con API key exige el scope products:write; una key de solo products:read recibe 403. Tenant desde credencial. Authentication: API key or dashboard sessionScopes: products:write, products:read Responses StatusDescription200Successful Response (array\u003Cstring>)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2393,"title":2394,"titles":2395,"content":2396,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#get-productsexport","GET \u002Fproducts\u002Fexport",[2349],"Exportación o plantilla CSV Gestión del catálogo (permiso products:manage_read, owner\u002Fmanager). Con API key exige el scope products:write. Devuelve el CSV (name,short_name,unit,price,category,synonyms,sku,active,featured,sort_order) con price en unidad mayor, punto decimal y sin miles; las celdas que empiezan con = + - @, tab o salto van con apóstrofo contra inyección de fórmulas. template=true devuelve solo el encabezado. Authentication: API key or dashboard sessionScopes: products:write Parameters NameInRequiredTypeDescriptiontemplatequeryNoboolean default falseqqueryNostring default ``categoryqueryNostring \u002F null (null)activequeryNoboolean \u002F null (null) Responses StatusDescription200Successful Response (ProductCsvDownload)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2398,"title":2399,"titles":2400,"content":2401,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#post-productsimportidconfirm","POST \u002Fproducts\u002Fimport\u002F{id}\u002Fconfirm",[2349],"Confirmar la importación de una vista previa Scope products:write. Confirmar el mismo id es idempotente (devuelve el mismo resultado, que se conserva 7 días; luego 404). 409 products.preview_stale si cambió el catálogo, la moneda o la vista previa caducó; 404 si es de otro negocio. Todo o nada, bajo un solo bloqueo del catálogo. Authentication: API key or dashboard sessionScopes: products:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Successful Response (ProductImportResult)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2403,"title":2404,"titles":2405,"content":2406,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#post-productsimportidundo","POST \u002Fproducts\u002Fimport\u002F{id}\u002Fundo",[2349],"Deshacer una importación confirmada Scope products:write. Borra los productos que creó la importación (o los archiva si ya tienen historial) y devuelve los actualizados a su valor anterior. Solo mientras el catálogo no cambió desde la confirmación: si no, 409 products.import_undo_stale. Repetirlo devuelve el mismo resultado; 404 si la importación no existe, no se confirmó, venció (7 días) o es de otro negocio. Authentication: API key or dashboard sessionScopes: products:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Successful Response (ProductImportResult)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2408,"title":2409,"titles":2410,"content":2411,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#post-productsimportpreview","POST \u002Fproducts\u002Fimport\u002Fpreview",[2349],"Validar un CSV (vista previa, no importa nada) Scope products:write. FIU-525: exactamente uno de csv, xlsx (Excel en base64, hasta 1 MiB; primera hoja o sheet) o rows (hasta 2000 objetos que leyó una IA de un Excel, PDF o foto); con xlsx o rows, columns mapea encabezado → columna (name, unit, price, …) y la respuesta devuelve columns e ignored_columns. CSV UTF-8 de hasta 1 MiB y 2000 filas (, o ;, BOM aceptado); un texto con U+FFFD (Windows-1252 leído como UTF-8) se rechaza con 422 products.csv_encoding. El precio sigue la regla única de montos (docs\u002Fapi\u002Fproductos.md): «15.000» en PYG\u002FCLP = 15000, «1,500» en BRL\u002FCOP se rechaza como ambiguo. Celdas en blanco en active, featured, sort_order y sku, y columnas omitidas, no cambian nada. Nada se importa hasta confirmar; la vista previa válida dura 30 minutos y queda ligada al negocio, la moneda y los valores del catálogo. Authentication: API key or dashboard sessionScopes: products:write Request body (required) application\u002Fjson: ProductCsvInput Responses StatusDescription200Successful Response (ProductCsvPreview)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2413,"title":2414,"titles":2415,"content":2416,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#get-productsstats","GET \u002Fproducts\u002Fstats",[2349],"Ventas por producto en el período (unidades, tareas y facturación) F3-315. Ventas por producto del período para la lista del catálogo, en una sola consulta agrupada (nunca una llamada por fila). Permiso products:manage_read (owner\u002Fmanager); con API key, scope bookings:read (las ventas salen de las tareas). Cuenta las líneas del pedido (qty entregado, nunca lo pedido) de tareas completadas, sin pruebas, atribuidas al día local de inicio\u002Fvencimiento, igual que GET \u002Fv1\u002Fservices\u002Fstats. revenue_minor = unidades por precio copiado en la línea (unidad menor) y currency solo con permiso finance:analyze (rol de la matriz o scope de la key); si no, null. Solo devuelve productos con ventas; ids (hasta 100) limita a los de la página visible. Máximo 366 días. Tenant desde la credencial, RLS. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionfromqueryYesstring (date)Primer día local del negocio (incluido)toqueryYesstring (date)Último día local del negocio (incluido)idsqueryNoarray \u002F null (null) Responses StatusDescription200Successful Response (ProductSalesOut)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2418,"title":2419,"titles":2420,"content":2421,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#get-productsstore-search","GET \u002Fproducts\u002Fstore-search",[2349],"Ver la búsqueda en la tienda externa 404 store_search_not_configured si el proyecto no tiene una. F4-55. Scope products:write (owner y manager por sesión; escrituras con CSRF). Una fuente por proyecto: URL HTTPS plantilla con {q} (obligatorio) y {limit} solo como valores completos del query; host y ruta fijos. Encabezados con credenciales cifrados y de escritura únicamente (se devuelven solo sus nombres); secretos en el query (?token=, ?api_key=…) se rechazan. Mapeo declarativo de F2-48 (items_path, rutas a.b[0].c) con nombre y precio obligatorios y moneda, URL, imagen, stock e id opcionales. service_id es el servicio de pedidos por chat con carrito al que entran los productos. Authentication: API key or dashboard sessionScopes: products:write Responses StatusDescription200Successful Response (StoreSearchOut)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2423,"title":2424,"titles":2425,"content":2426,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#put-productsstore-search","PUT \u002Fproducts\u002Fstore-search",[2349],"Crear o editar la búsqueda en la tienda externa Crea la fuente (sin expected_version) o la edita (con la versión vigente; 409 store_search_version_conflict si cambió). Al editar, los encabezados guardados se conservan salvo replace_headers: true; cambiar el host de la URL con credenciales guardadas exige reemplazarlas (422 credentials_origin_changed). Valida forma, HTTPS y DNS público de la URL (422 store_search_invalid con reason unsafe_url) y que el servicio exista, esté activo, acepte pedidos por chat y tenga carrito (service_not_orderable). Auditado sin URL completa ni credenciales. F4-55. Scope products:write (owner y manager por sesión; escrituras con CSRF). Una fuente por proyecto: URL HTTPS plantilla con {q} (obligatorio) y {limit} solo como valores completos del query; host y ruta fijos. Encabezados con credenciales cifrados y de escritura únicamente (se devuelven solo sus nombres); secretos en el query (?token=, ?api_key=…) se rechazan. Mapeo declarativo de F2-48 (items_path, rutas a.b[0].c) con nombre y precio obligatorios y moneda, URL, imagen, stock e id opcionales. service_id es el servicio de pedidos por chat con carrito al que entran los productos. Authentication: API key or dashboard sessionScopes: products:write Request body (required) application\u002Fjson: StoreSearchIn Responses StatusDescription200Successful Response (StoreSearchOut)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2428,"title":2429,"titles":2430,"content":2431,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#delete-productsstore-search","DELETE \u002Fproducts\u002Fstore-search",[2349],"Desactivar la búsqueda en la tienda externa La desactiva (conserva la configuración y sube la versión): el bot deja de ofrecerla y los productos de la tienda que estaban en carritos abiertos ya no se pueden sumar. F4-55. Scope products:write (owner y manager por sesión; escrituras con CSRF). Una fuente por proyecto: URL HTTPS plantilla con {q} (obligatorio) y {limit} solo como valores completos del query; host y ruta fijos. Encabezados con credenciales cifrados y de escritura únicamente (se devuelven solo sus nombres); secretos en el query (?token=, ?api_key=…) se rechazan. Mapeo declarativo de F2-48 (items_path, rutas a.b[0].c) con nombre y precio obligatorios y moneda, URL, imagen, stock e id opcionales. service_id es el servicio de pedidos por chat con carrito al que entran los productos. Authentication: API key or dashboard sessionScopes: products:write Responses StatusDescription200Successful Response (StoreSearchOut)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2433,"title":2434,"titles":2435,"content":2436,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#get-productsstore-searchpresets","GET \u002Fproducts\u002Fstore-search\u002Fpresets",[2349],"Plantillas listas de búsqueda en tienda Plantillas para Tiendanube\u002FNuvemshop, WooCommerce, Shopify, Make, n8n y una URL propia: URL de ejemplo (reemplazar el dominio o el id de la tienda), nombres de los encabezados de credenciales, mapeo y escala del precio. No consulta ninguna tienda. F4-55. Scope products:write (owner y manager por sesión; escrituras con CSRF). Una fuente por proyecto: URL HTTPS plantilla con {q} (obligatorio) y {limit} solo como valores completos del query; host y ruta fijos. Encabezados con credenciales cifrados y de escritura únicamente (se devuelven solo sus nombres); secretos en el query (?token=, ?api_key=…) se rechazan. Mapeo declarativo de F2-48 (items_path, rutas a.b[0].c) con nombre y precio obligatorios y moneda, URL, imagen, stock e id opcionales. service_id es el servicio de pedidos por chat con carrito al que entran los productos. Authentication: API key or dashboard sessionScopes: products:write Responses StatusDescription200Successful Response (array\u003CStorePreset>)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2438,"title":2439,"titles":2440,"content":2441,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#post-productsstore-searchtest","POST \u002Fproducts\u002Fstore-search\u002Ftest",[2349],"Probar la búsqueda en la tienda externa «Probar búsqueda»: hace la misma consulta que el bot con la configuración guardada (aunque esté desactivada) y devuelve los resultados mapeados, con el precio ya en la unidad menor de la moneda del negocio, y los descartados por motivo (invalid_price, currency_mismatch, missing_name, duplicate). No guarda instantáneas. Traída segura: solo HTTPS a IPs públicas validadas en cada salto y fijadas al socket, 3 s en total, 512 KiB descomprimidos, caché por consulta y circuito tras fallos. Una tienda lenta, caída o con respuesta inválida o enorme responde 200 con ok: false y un status corto, nunca el cuerpo ni el error crudo. 10 pruebas por minuto por proyecto (429 store_search_rate_limited). F4-55. Scope products:write (owner y manager por sesión; escrituras con CSRF). Una fuente por proyecto: URL HTTPS plantilla con {q} (obligatorio) y {limit} solo como valores completos del query; host y ruta fijos. Encabezados con credenciales cifrados y de escritura únicamente (se devuelven solo sus nombres); secretos en el query (?token=, ?api_key=…) se rechazan. Mapeo declarativo de F2-48 (items_path, rutas a.b[0].c) con nombre y precio obligatorios y moneda, URL, imagen, stock e id opcionales. service_id es el servicio de pedidos por chat con carrito al que entran los productos. Authentication: API key or dashboard sessionScopes: products:write Request body (required) application\u002Fjson: StoreSearchTest Responses StatusDescription200Successful Response (StoreSearchResult)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2443,"title":2444,"titles":2445,"content":2446,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fproducts#get-productssuggestions","GET \u002Fproducts\u002Fsuggestions",[2349],"Sugerencias de formularios existentes Gestión del catálogo (permiso products:manage_read, owner\u002Fmanager). Con API key exige el scope products:write; una key de solo products:read recibe 403. Tenant desde credencial. Authentication: API key or dashboard sessionScopes: products:write, products:read Responses StatusDescription200Successful Response (array\u003CProductSuggestion>)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2448,"title":2449,"titles":2450,"content":2451,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fzones","API · zones",[],"zones operations in the OpenAPI contract that accept an API key. Zonas (F1-38): grupos de personas con un área (barrios, ciudades o códigos postales), días y horas de atención y un tope opcional de tareas por franja. Lectura: todos los roles; escritura: owner y manager.",{"id":2453,"title":2454,"titles":2455,"content":2456,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fzones#get-zones","GET \u002Fzones",[2449],"Listar zonas Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioninclude_inactivequeryNoboolean default false Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":2458,"title":2459,"titles":2460,"content":2461,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fzones#post-zones","POST \u002Fzones",[2449],"Crear una zona (owner\u002Fmanager, CSRF) Authentication: API key or dashboard sessionScopes: None Request body (required) application\u002Fjson: ZoneInput Responses StatusDescription201Creada (Zone)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2463,"title":2464,"titles":2465,"content":2466,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fzones#get-zonesid","GET \u002Fzones\u002F{id}",[2449],"Leer una zona (activa o no) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (Zone)404Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2468,"title":2469,"titles":2470,"content":2471,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fzones#patch-zonesid","PATCH \u002Fzones\u002F{id}",[2449],"Editar una zona (owner\u002Fmanager, CSRF) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: ZonePatch Responses StatusDescription200Actualizada (Zone)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2473,"title":2474,"titles":2475,"content":2476,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fzones#delete-zonesid","DELETE \u002Fzones\u002F{id}",[2449],"Desactivar una zona (owner\u002Fmanager, CSRF) Una zona no se borra (las tareas la referencian): se desactiva y deja de asignarse y de limitar. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription204DesactivadadefaultError (RFC 9457) (Problem)",{"id":2478,"title":2479,"titles":2480,"content":2481,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fzones#get-zonescoverage","GET \u002Fzones\u002Fcoverage",[2449],"Cobertura del negocio (unión de las zonas activas) La cobertura es la unión de las zonas activas; sin zonas no hay límite (solo el país). Incluye qué hace el bot con una dirección fuera de cobertura. Todos los roles del panel y API keys config:read. Authentication: API key or dashboard sessionScopes: config:read Responses StatusDescription200OK (Coverage)defaultError (RFC 9457) (Problem)",{"id":2483,"title":2484,"titles":2485,"content":2486,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fzones#put-zonescoverage","PUT \u002Fzones\u002Fcoverage",[2449],"Cambiar qué hace el bot fuera de cobertura (owner\u002Fmanager, CSRF) Aplica a una dirección fuera de todas las zonas y a una entrega (reach_zone_ids) que no llega a la zona de la dirección. take (default): el bot ofrece la entrega y toma el pedido, la tarea lleva la etiqueta fuera-de-cobertura y aparece en «Necesita tu atención». reject: el bot no ofrece esa entrega, responde que por ahora no llega a esa zona y no crea nada. Auditado (coverage.updated). Authentication: API key or dashboard sessionScopes: None Request body (required) application\u002Fjson: CoverageInput Responses StatusDescription200OK (Coverage)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2488,"title":2489,"titles":2490,"content":2491,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fzones#get-zonesmatch","GET \u002Fzones\u002Fmatch",[2449],"Qué zona cubre un destino Compara barrio, ciudad, código postal o dirección normalizados (sin tildes, mayúsculas ni signos). Prioridad: código postal (por prefijo), barrio, ciudad, provincia, país; ante varias gana la coincidencia más larga y luego el nombre. zone: null = sin zona (fuera de cobertura si el negocio tiene zonas). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionneighborhoodqueryNostringcityqueryNostringpostal_codequeryNostringaddressqueryNostringlatqueryNonumberLatitud del destino; va junto con lng. Con coordenadas gana el área dibujada más chica que contiene el punto; sin coincidencia geométrica queda el respaldo por texto.lngqueryNonumberLongitud del destino; va junto con lat. Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":2493,"title":2494,"titles":2495,"content":2496,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments","API · payments",[],"payments operations in the OpenAPI contract that accept an API key. Cobros de los negocios; notificaciones autenticadas por HMAC de Mercado Pago.",{"id":2498,"title":2499,"titles":2500,"content":2501,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsaccountsmercadopago","GET \u002Fpayments\u002Faccounts\u002Fmercadopago",[2494],"Status Lectura segura del estado, sin tokens. Scope payments:read para API keys. connection_mode es la conexión nueva que se ofrece; en países con política token es disabled mientras el interruptor de plataforma del token pegado esté apagado (F4-47). Una cuenta ya guardada se informa igual en account. Authentication: API key or dashboard sessionScopes: payments:read Responses StatusDescription200Successful Response (MercadoPagoAvailability)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)503Error (RFC 9457) (Problem)",{"id":2503,"title":2504,"titles":2505,"content":2506,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsaccountsmercadopagocharges","GET \u002Fpayments\u002Faccounts\u002Fmercadopago\u002Fcharges",[2494],"Charges Últimos cobros electrónicos del proyecto para Finanzas → Cobros (F4-25), el más nuevo primero. Incluye cobros de cuentas ya desconectadas. Sin datos del pagador, link de pago ni referencias del proveedor. Sesión owner\u002Fmanager (payments:accounts_configure); API keys con scope payments:read. Authentication: API key or dashboard sessionScopes: payments:read Parameters NameInRequiredTypeDescriptionlimitqueryNointeger default 10 Responses StatusDescription200Successful Response (MercadoPagoCharges)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2508,"title":2509,"titles":2510,"content":2511,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsbookingsbooking_idbalance","GET \u002Fpayments\u002Fbookings\u002F{booking_id}\u002Fbalance",[2494],"Booking Balance Tenant desde credencial. Scope payments:read_balance; cookie + CSRF. Bearer exige Idempotency-Key en todos los POST (máximo 128 caracteres); conflicto del ledger Bearer es 422, conflicto de dominio 409. Owner\u002Fmanager; staff solo tareas asignadas (no anula ni ajusta). Sin llamadas a proveedores. Montos enteros minor units, PYG exponente 0. Clave de registro permanente; misma clave con otros datos devuelve 409. Duplicados por tarea\u002Fmonto\u002Fmétodo en ventana UTC de 5 minutos se rechazan. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionbooking_idpathYesstring (uuid) Responses StatusDescription200Successful Response (BalanceView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2513,"title":2514,"titles":2515,"content":2516,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsbookingsbooking_idcharges","GET \u002Fpayments\u002Fbookings\u002F{booking_id}\u002Fcharges",[2494],"Booking Charges Tenant desde credencial. Scope payments:read_balance. Historial de cobros de la tarea (recibos manuales asignados y cobros electrónicos), el más nuevo primero. applied_minor es la parte aplicada a esta tarea. La nota y el motivo de anulación son privados: owner\u002Fmanager o quien registró el recibo. Staff solo tareas asignadas. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionbooking_idpathYesstring (uuid) Responses StatusDescription200Successful Response (BookingChargesView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2518,"title":2519,"titles":2520,"content":2521,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsbookingsbooking_iddue","POST \u002Fpayments\u002Fbookings\u002F{booking_id}\u002Fdue",[2494],"Adjust Due Tenant desde credencial. Scope payments:adjust; cookie + CSRF. Una tarea cubierta no permite ajustar el importe (409 payment_conflict, detail payment.booking_covered_by_plan); primero quitar el plan. Notas internas editables. Define (si la tarea aún no tiene valor) o ajusta el valor a cobrar, en unidad menor de la moneda del negocio (PYG y CLP enteros), con motivo obligatorio y auditoría payment.due_adjusted. Solo owner\u002Fmanager. Sin valor definido, el servidor usa por defecto el total del formulario o, si no hay, el precio del catálogo del servicio al congelarlo (tareas por agendar, confirmadas, en curso y completadas). Bearer exige Idempotency-Key en todos los POST (máximo 128 caracteres). Sin llamadas a proveedores. Montos enteros minor units, PYG exponente 0. Clave de registro permanente; misma clave con otros datos devuelve 409. Duplicados por tarea\u002Fmonto\u002Fmétodo en ventana UTC de 5 minutos se rechazan. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionbooking_idpathYesstring (uuid)Idempotency-KeyheaderNostring \u002F null (null) Request body (required) application\u002Fjson: AdjustDue Responses StatusDescription204Successful Response400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2523,"title":2524,"titles":2525,"content":2526,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsbookingsbooking_idlinesline_idexpense","POST \u002Fpayments\u002Fbookings\u002F{booking_id}\u002Flines\u002F{line_id}\u002Fexpense",[2494],"Registrar como gasto el costo de una línea de la tarea FIU-472: gasto de monto costo x cantidad, categoría Insumos, vinculado a la tarea (booking_id). El\nstaff, solo en sus tareas y sus líneas: queda por aprobar. 409 expense.line_cost_required (la línea no\ntiene costo) o expense.line_has_expense (ya tiene otro gasto). Reintentar con la misma clave devuelve el\nmismo gasto. FIU-472 (decisión 2): el costo de la línea se registra aparte, de un toque, como gasto de monto costo x cantidad, categoría «Insumos» (supplies), proveedor y comprobante opcionales (el comprobante, con POST \u002Fpayments\u002Fexpenses\u002F{id}\u002Freceipt\u002F...), vinculado a la tarea (booking_id). Con expenses:record queda aprobado; con expenses:record_own (staff: solo sus tareas y sus líneas) queda pending_approval. API key expenses:record. Reintentar con la misma clave devuelve el mismo gasto. 409 expense.line_cost_required, expense.line_has_expense. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionbooking_idpathYesstring (uuid)line_idpathYesstring (uuid)Idempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: LineExpenseIn Responses StatusDescription201Successful Response (ExpenseView)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2528,"title":2529,"titles":2530,"content":2531,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsbookingsbooking_idpayment-link","POST \u002Fpayments\u002Fbookings\u002F{booking_id}\u002Fpayment-link",[2494],"Cobrar con link de Mercado Pago el saldo de una tarea F4-20 «Cobrar». Permiso y scope payments:link (owner\u002Fmanager; staff solo en sus tareas y si el dueño no apagó «El repartidor puede cobrar»); cookie + CSRF o API key. Exige Idempotency-Key. El monto es el saldo de la tarea que calcula el core (nunca lo manda quien lo pide). Un link abierto por el mismo monto se devuelve con 200 y replay=true (nunca dos links por la misma tarea y monto); con otro monto abierto, 409 payment.link_pending. El cobro queda registrado y auditado (payment.created, payment.link_requested) antes de llamar a Mercado Pago; desde el panel el link vuelve listo (pending con checkout_url), con API key lo crea el worker enseguida (created sin URL: consultar GET \u002Fpayments\u002Fbookings\u002F{booking_id}\u002Fcharges). deliver=conversation además lo manda por la conversación del cliente con una plantilla del servidor (delivery=queued; repetir la misma clave no manda dos mensajes, otra clave lo reenvía). Vence a las 48 h. 409 payment.link_unavailable (sin cuenta de producción BR\u002FAR que coincida con el proyecto), payment.link_not_chargeable (tarea sin cliente, de prueba, en espera de seña o cerrada), payment.nothing_due, payment.parts_cover_balance (las partes abiertas ya cubren el saldo).\nF4-92 «Cobrar una parte»: con amount_minor el link es por esa parte (part=true), con su monto fijo. Pueden quedar varias partes abiertas a la vez; la suma de los cobros abiertos de la tarea nunca supera su saldo (422 payment_part_exceeds_balance, con remaining_minor, open_minor y currency). Las partes no se reemplazan entre sí ni las anula el link del bot o un QR\u002FPoint por el saldo; sin amount_minor, el link cobra lo que queda sin parte. Reintentar con la misma Idempotency-Key devuelve la misma parte (200, replay), aunque ya se haya pagado; otra clave es otra parte aunque el monto sea igual; la misma clave con otro monto da 409 payment.idempotency_conflict. Si baja el total, la parte que ya no entra se anula (void_reason=amount_changed). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionbooking_idpathYesstring (uuid)Idempotency-KeyheaderYesstring Request body (required) application\u002Fjson: PaymentLinkInput Responses StatusDescription200Ya había un link abierto por el mismo monto, o es el reintento de la misma parte (replay) (PaymentLinkView)201Link creado (PaymentLinkView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2533,"title":2534,"titles":2535,"content":2536,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsbookingsbalances","GET \u002Fpayments\u002Fbookings\u002Fbalances",[2494],"Booking Balances Tenant desde credencial. Scope payments:read_balance; permiso de la matriz payments:read_balance (owner, manager, staff sobre tareas asignadas; viewer no). Saldo derivado de hasta 100 tareas en una pasada (chip de las listas). Omite las tareas que no se pueden calcular y las que el rol no ve. Sin bloqueos de filas. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidsqueryYesarray Responses StatusDescription200Successful Response (BookingBalancesView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2538,"title":2539,"titles":2540,"content":2541,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentscash","GET \u002Fpayments\u002Fcash",[2494],"Leer caja o configuración Authentication: API key or dashboard sessionScopes: cash:read Parameters NameInRequiredTypeDescriptiondayqueryNostring (date)Día local del negocio; por defecto hoy Responses StatusDescription200Resultado en unidades menores de la moneda del negocio (CashDay)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2543,"title":2544,"titles":2545,"content":2546,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentscashentries","POST \u002Fpayments\u002Fcash\u002Fentries",[2494],"Registrar rendición, cierre o ajuste inmutable También exige cash:remit para rendir o cash:close para cerrar\u002Fajustar. Staff solo lee su efectivo. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: cash:read Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: CashCommand Responses StatusDescription201Resultado en unidades menores de la moneda del negocio (CashEntryView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2548,"title":2549,"titles":2550,"content":2551,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentscashsettings","GET \u002Fpayments\u002Fcash\u002Fsettings",[2494],"Leer caja o configuración Authentication: API key or dashboard sessionScopes: cash:configure Responses StatusDescription200Resultado en unidades menores de la moneda del negocio (CashAlertSettings)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2553,"title":2554,"titles":2555,"content":2556,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#put-paymentscashsettings","PUT \u002Fpayments\u002Fcash\u002Fsettings",[2494],"Configurar aviso opcional de efectivo Authentication: API key or dashboard sessionScopes: cash:configure Request body (required) application\u002Fjson: CashAlertSettings Responses StatusDescription200Resultado en unidades menores de la moneda del negocio (CashAlertSettings)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2558,"title":2559,"titles":2560,"content":2561,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentschargescharge_idapply-to-account","POST \u002Fpayments\u002Fcharges\u002F{charge_id}\u002Fapply-to-account",[2494],"Usar un pago «a devolver» para otra deuda Tenant desde credencial. Scope payments:adjust; cookie + CSRF; solo owner\u002Fmanager. Un pago tardío electrónico separado «a devolver» (refund_due) no compensa deudas del cliente; con confirm=true pasa al saldo del cliente y desde ahí cubre sus deudas más antiguas (FIFO). Auditoría payment.applied_to_account; idempotente (repetirlo devuelve el mismo resultado). No llama a Mercado Pago ni devuelve dinero. 409 payment.not_refund_due si el cobro no está «a devolver»; 409 payment.in_mediation con un reclamo abierto en MP. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncharge_idpathYesstring (uuid)Idempotency-KeyheaderNostring (null) Request body (required) application\u002Fjson: ApplyToAccount Responses StatusDescription200Pago pasado al saldo del cliente (AppliedToAccountView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2563,"title":2564,"titles":2565,"content":2566,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentschargescharge_idcancel","POST \u002Fpayments\u002Fcharges\u002F{charge_id}\u002Fcancel",[2494],"Anular un cobro abierto de una tarea (link, QR o Point) F4-92. Permiso y scope payments:link (owner\u002Fmanager; staff solo en sus tareas y si el dueño no apagó «El repartidor puede cobrar», si no 403); cookie + CSRF o API key (un QR o Point, solo sesión del panel). Anula un cobro abierto de la tarea, sea una parte o el cobro por el saldo (link, QR o Point; la tarjeta no), con void_reason=charge_cancelled; en Mercado Pago se cancela en el momento y, si falla, con reintentos. Un pago verificado que llegue igual queda en revisión. Los demás cobros no cambian. Repetir sobre un cobro anulado o vencido es un no-op. 409 payment.charge_not_found (no existe, es de otro proyecto o no es visible para quien pide), payment.charge_not_open (ya pagado u otro estado final). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncharge_idpathYesstring (uuid) Responses StatusDescription200Successful Response (PaymentLinkView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2568,"title":2569,"titles":2570,"content":2571,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentschargescharge_idfiscal","GET \u002Fpayments\u002Fcharges\u002F{charge_id}\u002Ffiscal",[2494],"Marcador fiscal y comprobantes de un cobro F4-85. Tenant desde credencial. Scope\u002Fpermiso payments:fiscal (owner\u002Fmanager). Fiuit nunca emite comprobantes; devuelve el marcador manual (not_required, pending o issued_external con número y fecha) y los comprobantes del emisor externo del negocio, si hay. Otro proyecto o un id inexistente dan 404 payment.not_found. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncharge_idpathYesstring (uuid) Responses StatusDescription200Marcador y comprobantes (ChargeFiscalView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2573,"title":2574,"titles":2575,"content":2576,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#put-paymentschargescharge_idfiscal","PUT \u002Fpayments\u002Fcharges\u002F{charge_id}\u002Ffiscal",[2494],"Marcar si un cobro lleva comprobante fiscal F4-85. Tenant desde credencial. Scope\u002Fpermiso payments:fiscal (owner\u002Fmanager); cookie + CSRF. Idempotente (repetir lo mismo no cambia nada). Solo cobros que recibieron dinero (409 fiscal.charge_not_paid; uno anulado, 409 payment.voided); si el emisor conectado ya emitió la factura, 409 fiscal.document_issued. Fecha futura, 409 fiscal.future_date. Auditado (payment.fiscal_marked); el monto del cobro no cambia. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncharge_idpathYesstring (uuid) Request body (required) application\u002Fjson: ChargeFiscalMark Responses StatusDescription200Marcador actualizado (ChargeFiscalView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2578,"title":2579,"titles":2580,"content":2581,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentschargescharge_idrefunds","GET \u002Fpayments\u002Fcharges\u002F{charge_id}\u002Frefunds",[2494],"Devoluciones de un cobro electrónico Tenant desde credencial. Scope\u002Fpermiso payments:refund (solo owner\u002Fmanager). Lo devuelto (acreditado), lo pedido en curso (pending) y lo que todavía se puede devolver (refundable_minor). Si el cobro no admite devolución desde Fiuit, refundable_minor es 0 y refund_blocked trae el motivo (cobro manual, no pagado, contracargo, reclamo abierto, devolución parcial sin monto conocido, orden QR\u002FPoint, pago sin id de Mercado Pago o cobro pasado al saldo del cliente). Otro proyecto o un id inexistente dan el mismo 409 payment.charge_not_found. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncharge_idpathYesstring (uuid) Responses StatusDescription200Devoluciones del cobro (ChargeRefundsView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2583,"title":2584,"titles":2585,"content":2586,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentschargescharge_idrefunds","POST \u002Fpayments\u002Fcharges\u002F{charge_id}\u002Frefunds",[2494],"Devolver (total o parcial) un cobro de Mercado Pago Tenant desde credencial. Scope\u002Fpermiso payments:refund (solo owner\u002Fmanager); cookie + CSRF. Exige confirm=true e Idempotency-Key. Sin amount_minor devuelve todo lo que queda. El pedido queda registrado y auditado (payment.refund_requested) antes de llamar a Mercado Pago, con la misma clave de idempotencia en cada reintento; la respuesta trae status succeeded, failed (rechazo definitivo, con aviso a owner\u002Fmanager) o pending (respuesta ambigua o en proceso; el worker reintenta). Repetir la misma clave devuelve la misma devolución; con otro monto o motivo, 409 payment.idempotency_conflict. Nunca más de lo cobrado (servicio y base de datos) → 409 payment.refund_exceeds_remaining o payment.already_refunded. 409 payment.not_refundable, payment.in_mediation, payment.refund_manual_unsupported (un cobro manual se anula), payment.refund_unsupported_method (orden QR\u002FPoint, se devuelve en Mercado Pago), payment.refund_unavailable (sin id del pago en MP), payment.refund_amount_unavailable, payment.refund_plan_unsupported (paquete o club), payment.refund_applied_to_account (pasado al saldo del cliente con «Usar para otra deuda»; limitación hasta F4-56). El cobro pasa a partially_refunded o refunded; lo devuelto se descuenta del saldo de la tarea, de Financiero, de las comisiones y de la seña en estadísticas. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncharge_idpathYesstring (uuid)Idempotency-KeyheaderYesstring Request body (required) application\u002Fjson: RefundInput Responses StatusDescription201Devolución registrada (y ejecutada si el proveedor respondió) (RefundView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2588,"title":2589,"titles":2590,"content":2591,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentscommissionsadjustments","POST \u002Fpayments\u002Fcommissions\u002Fadjustments",[2494],"Ajustar la comisión de un día Ajuste manual con signo y motivo, inmutable y auditado, sobre un día abierto. Un día de un período liquidado da 409 commission.period_settled (F4-77); el ajuste va en un día abierto. Owner\u002Fmanager. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: commissions:adjust Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: CommissionAdjustmentInput Responses StatusDescription201Importes en unidades menores de la moneda del negocio (CommissionAdjustmentView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2593,"title":2594,"titles":2595,"content":2596,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentscommissionsday","GET \u002Fpayments\u002Fcommissions\u002Fday",[2494],"Día de comisiones por profesional Cobrado por método, propinas, comisión, ajustes y diferencias de caja de cada profesional en un día local, calculado al vuelo (sin cierre diario). Staff ve solo lo suyo; owner\u002Fmanager ven a todos y lo cobrado sin profesional. Los cobros de tareas completadas se atribuyen a quien tenía sus recursos al completar; mientras siga abierta, a quien los tiene hoy. Tareas no_show\u002Fcancelled\u002Ffailed no generan comisión ni unattributed_minor; sus cobros permanecen como ingreso del negocio en Financiero\u002FCaja. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: commissions:read Parameters NameInRequiredTypeDescriptiondayqueryNostring (date) Responses StatusDescription200Importes en unidades menores de la moneda del negocio (CommissionDay)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2598,"title":2599,"titles":2600,"content":2601,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentscommissionsexport","GET \u002Fpayments\u002Fcommissions\u002Fexport",[2494],"Exportar comisiones (CSV) Una fila por profesional y día, importes en unidad menor y moneda. Auditado (commission.exported). Staff solo lo propio. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: commissions:export Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)member_idqueryNostring (uuid) Responses StatusDescription200CSV UTF-8 en unidades menores (string)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2603,"title":2604,"titles":2605,"content":2606,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentscommissionsreport","GET \u002Fpayments\u002Fcommissions\u002Freport",[2494],"Reporte de comisiones por período y profesional Totales por profesional entre start y end (días locales, inclusive, hasta 366), calculados al vuelo; cada tarea cuenta una vez. Staff solo lo propio (member_id de otra persona da 403). En F4-77 los días de un período liquidado salen del asiento congelado (settlements); la comisión de una anulación o devolución se revierte en el día del cobro original y el período de la devolución lo avisa en reversals; carried_minor (dentro de adjustments_minor) corrige un período ya liquidado. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: commissions:read Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)member_idqueryNostring (uuid) Responses StatusDescription200Importes en unidades menores de la moneda del negocio (CommissionReport)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2608,"title":2609,"titles":2610,"content":2611,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentscommissionsrules","GET \u002Fpayments\u002Fcommissions\u002Frules",[2494],"Listar reglas de comisión Staff ve las reglas generales y las suyas. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: commissions:read Responses StatusDescription200Importes en unidades menores de la moneda del negocio (CommissionRules)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2613,"title":2614,"titles":2615,"content":2616,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentscommissionsrules","POST \u002Fpayments\u002Fcommissions\u002Frules",[2494],"Crear regla de comisión Porcentaje (rate_bp, 4000 = 40 %) o monto fijo (amount_minor, por tarea o por unidad de producto), por profesional y por servicio o producto, con o sin descontar la comisión del medio de pago, vigente desde valid_from. Dos reglas del mismo alcance que se superponen dan 409 commission.rule_overlap. Owner\u002Fmanager. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: commissions:configure Request body (required) application\u002Fjson: CommissionRuleInput Responses StatusDescription201Importes en unidades menores de la moneda del negocio (CommissionRuleView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2618,"title":2619,"titles":2620,"content":2621,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentscommissionsrulesrule_idend","POST \u002Fpayments\u002Fcommissions\u002Frules\u002F{rule_id}\u002Fend",[2494],"Terminar una regla de comisión Fija el último día de vigencia (inclusive). Una regla no se edita: se termina y se crea otra. Owner\u002Fmanager. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: commissions:configure Parameters NameInRequiredTypeDescriptionrule_idpathYesstring (uuid) Request body (required) application\u002Fjson: CommissionRuleEnd Responses StatusDescription200Importes en unidades menores de la moneda del negocio (CommissionRuleView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2623,"title":2624,"titles":2625,"content":2626,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentscommissionssettlements","GET \u002Fpayments\u002Fcommissions\u002Fsettlements",[2494],"Liquidaciones de comisiones de un período F4-77. Liquidaciones que tocan start..end (días locales, inclusive, hasta 366), con los montos congelados, los ajustes automáticos que ya congelaron de otros períodos (carried_from) y lo que cada una tiene pendiente de pasar como ajuste automático al período abierto siguiente (pending_carry_minor, carry_day). Staff solo lo propio (member_id de otra persona da 403). No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: commissions:read Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)member_idqueryNostring (uuid) Responses StatusDescription200Importes en unidades menores de la moneda del negocio (CommissionSettlements)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2628,"title":2629,"titles":2630,"content":2631,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentscommissionssettlements","POST \u002Fpayments\u002Fcommissions\u002Fsettlements",[2494],"Liquidar comisiones de una persona y un período F4-77. Congela la comisión y los ajustes de start..end (días locales, hasta hoy) de una persona en un asiento inmutable, con motivo, autor y fecha; auditoría commission.settled y evento interno commission.settled. Idempotente por Idempotency-Key y por período; liquidar otra vez el mismo período (otra clave, otro worker) devuelve el mismo asiento; otro período que se superpone da 409 commission.period_settled; un día futuro da 409 commission.future_day. Desde entonces esos días leen el asiento. Un cambio posterior (anulación, devolución o regla retroactiva) no lo reescribe; queda como ajuste automático (carried_minor) en el primer día abierto después del período, con referencia a esta liquidación. expected es opcional y lleva moneda y componentes mostrados al confirmar; si difieren del asiento que se congelaría, responde 409 commission.amounts_changed sin escribir. Un reintento de la misma clave devuelve su asiento original. Owner\u002Fmanager. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: commissions:settle Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: CommissionSettlementInput Responses StatusDescription201Asiento congelado, en unidades menores de la moneda del negocio (CommissionSettlementView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2633,"title":2634,"titles":2635,"content":2636,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentscustomerscustomer_idaccountreceipts","GET \u002Fpayments\u002Fcustomers\u002F{customer_id}\u002Faccount\u002Freceipts",[2494],"Customer Account Receipts Tenant desde credencial. Permiso\u002Fscope customer_account:read (owner\u002Fmanager; F4-35). Historial de cobros del cliente, también los pagos a cuenta y los anulados, el más nuevo primero y paginado. unapplied_minor es lo que no está asignado a una tarea. La nota y el motivo de anulación son privados. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid)limitqueryNointeger default 25offsetqueryNointeger default 0 Responses StatusDescription200Successful Response (AccountReceiptsView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2638,"title":2639,"titles":2640,"content":2641,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentscustomerscustomer_idaccounttasks","GET \u002Fpayments\u002Fcustomers\u002F{customer_id}\u002Faccount\u002Ftasks",[2494],"Customer Account Tasks Tenant desde credencial. Permiso\u002Fscope customer_account:read (owner\u002Fmanager; F4-35). Desglose por tarea vigente de la cuenta del cliente: a cobrar, cobrado y saldo de cada una, las más recientes primero. Paginado (limit hasta 100, offset); open_only deja solo las tareas con saldo. Staff no accede. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid)limitqueryNointeger default 25offsetqueryNointeger default 0open_onlyqueryNoboolean default false Responses StatusDescription200Successful Response (AccountTasksView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2643,"title":2644,"titles":2645,"content":2646,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentscustomerscustomer_idbalance","GET \u002Fpayments\u002Fcustomers\u002F{customer_id}\u002Fbalance",[2494],"Customer Balance Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid) Responses StatusDescription200Tenant desde credencial. Permiso\u002Fscope customer_balance:read (F4-35). Cuenta corriente del cliente, derivada siempre en el servidor: balance_minor = valor de las tareas vigentes menos todo lo cobrado (negativo = saldo a favor); on_account_minor = lo cobrado que no cubre una tarea vigente (pago a cuenta); debts = tareas con saldo pendiente, las más antiguas primero (hasta 50), solo con monto y fecha. Tareas canceladas, vencidas, fallidas o ausentes (no_show) no suman. Staff solo de clientes con los que trabaja; ajeno o inexistente da el mismo 403. Montos enteros en la unidad menor de la moneda (PYG y CLP sin decimales).",{"id":2648,"title":2649,"titles":2650,"content":2651,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsexpense-categories","GET \u002Fpayments\u002Fexpense-categories",[2494],"Listar categorías de gasto F4-73. Las 11 categorías fijas del proyecto (se crean en el primer uso) con key estable, kind (variable, fixed, staff, tax, fee, other), su nombre fijo en el idioma del proyecto (FIU-324: no se renombran) y si están ocultas. Owner\u002Fmanager o scope expenses:read. Authentication: API key or dashboard sessionScopes: expenses:read Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (ExpenseCategories)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2653,"title":2654,"titles":2655,"content":2656,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#patch-paymentsexpense-categoriescategory_id","PATCH \u002Fpayments\u002Fexpense-categories\u002F{category_id}",[2494],"Ocultar o mostrar una categoría de gasto F4-73. hidden la oculta de la carga del panel (o la vuelve a mostrar); los gastos ya cargados no cambian. FIU-324 (decisión del dueño, 2026-10-22): las categorías son fijas, no se renombran (un name en el cuerpo da 422); de ellas salen el DRE, el flujo y el informe MEI y para organizarse están las etiquetas (\u002Fpayments\u002Fexpense-tags). No se crean ni se borran categorías. Auditado. Owner\u002Fmanager o scope expenses:record. Authentication: API key or dashboard sessionScopes: expenses:record Parameters NameInRequiredTypeDescriptioncategory_idpathYesstring (uuid) Request body (required) application\u002Fjson: ExpenseCategoryPatch Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (ExpenseCategoryView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2658,"title":2659,"titles":2660,"content":2661,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsexpense-tags","GET \u002Fpayments\u002Fexpense-tags",[2494],"Listar etiquetas de gastos FIU-324. Las etiquetas libres del proyecto, las más usadas primero (después por nombre), con la categoría que recuerda cada una (la última con la que se usó: al cargar un gasto con esa etiqueta y sin category_id, se usa esa) y cuántos gastos vigentes la tienen (el staff cuenta solo los suyos). Las etiquetas se crean al usarlas en un gasto (tags). Owner\u002Fmanager, staff (expenses:record_own) o scope expenses:read. Authentication: API key or dashboard sessionScopes: expenses:read Responses StatusDescription200Etiquetas de gastos del proyecto (ExpenseTags)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2663,"title":2664,"titles":2665,"content":2666,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#patch-paymentsexpense-tagstag_id","PATCH \u002Fpayments\u002Fexpense-tags\u002F{tag_id}",[2494],"Renombrar una etiqueta de gastos FIU-324. Nuevo nombre (1 a 40 caracteres, espacios de más se recortan). Si otra etiqueta ya tiene ese nombre sin distinguir mayúsculas, 409 expense_tag.name_taken (se unen con merge). Auditado (expense_tag.renamed). Owner\u002Fmanager o scope expenses:record. Authentication: API key or dashboard sessionScopes: expenses:record Parameters NameInRequiredTypeDescriptiontag_idpathYesstring (uuid) Request body (required) application\u002Fjson: ExpenseTagPatch Responses StatusDescription200Etiquetas de gastos del proyecto (ExpenseTagView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2668,"title":2669,"titles":2670,"content":2671,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#delete-paymentsexpense-tagstag_id","DELETE \u002Fpayments\u002Fexpense-tags\u002F{tag_id}",[2494],"Borrar una etiqueta de gastos FIU-324. La etiqueta sale de todos sus gastos y se borra; los gastos no se tocan. Auditado (expense_tag.deleted). Owner\u002Fmanager o scope expenses:record. Authentication: API key or dashboard sessionScopes: expenses:record Parameters NameInRequiredTypeDescriptiontag_idpathYesstring (uuid) Responses StatusDescription200Etiquetas de gastos del proyecto (ExpenseTagDeleted)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2673,"title":2674,"titles":2675,"content":2676,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsexpense-tagstag_idmerge","POST \u002Fpayments\u002Fexpense-tags\u002F{tag_id}\u002Fmerge",[2494],"Unir una etiqueta en otra FIU-324. «Uní moto con motos»: los gastos de tag_id pasan a into_id (un gasto que ya tenía las dos queda con una) y tag_id se borra. La que queda conserva su categoría recordada (si no tenía, toma la de la otra). La misma etiqueta, 409 expense_tag.merge_same; una que no existe, 404. Auditado (expense_tag.merged). Owner\u002Fmanager o scope expenses:record. Authentication: API key or dashboard sessionScopes: expenses:record Parameters NameInRequiredTypeDescriptiontag_idpathYesstring (uuid) Request body (required) application\u002Fjson: ExpenseTagMerge Responses StatusDescription200Etiquetas de gastos del proyecto (ExpenseTagMerged)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2678,"title":2679,"titles":2680,"content":2681,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsexpenses","GET \u002Fpayments\u002Fexpenses",[2494],"Listar gastos F4-73. Gastos del proyecto, del más reciente al más viejo (occurred_on = día local del proyecto). total_minor suma solo los aprobados del filtro, sin anulados, pendientes, rechazados ni de prueba (independiente de la página); include_voided e include_test solo los muestran y status (F4-74) deja solo ese estado. Staff (expenses:record_own, F4-74) ve solo los gastos que cargó. Un gasto sin resource_id es «General» (sin prorrateo). Importes en unidad menor de la moneda del proyecto (PYG y CLP sin decimales). Owner\u002Fmanager o scope expenses:read. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: expenses:read Parameters NameInRequiredTypeDescriptionstartqueryNostring \u002F null (null)endqueryNostring \u002F null (null)category_idqueryNostring \u002F null (null)resource_idqueryNostring \u002F null (null)tag_idqueryNostring \u002F null (null)FIU-324. Solo los gastos con esa etiqueta; total_minor pasa a ser «gastos con esta etiqueta» (un gasto puede tener varias, así que los totales de dos etiquetas no se suman).statusqueryNostring \u002F null (null)include_voidedqueryNoboolean default falseinclude_testqueryNoboolean default falselimitqueryNointeger default 50offsetqueryNointeger default 0 Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (ExpensePage)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2683,"title":2684,"titles":2685,"content":2686,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsexpenses","POST \u002Fpayments\u002Fexpenses",[2494],"Cargar un gasto F4-73. Gasto en unidad menor de la moneda del proyecto (currency obligatoria e igual a la del proyecto; PYG y CLP sin decimales; mismo tope por moneda que los cobros manuales). occurred_on por defecto es hoy en la zona del proyecto; no acepta fechas futuras. La categoría «Comisiones del equipo» es una línea calculada y no se carga a mano (409 expense.computed_category). Idempotency-Key obligatoria: la misma clave con el mismo cuerpo devuelve el mismo gasto; con otro cuerpo, 409 payment.idempotency_conflict. is_test se guarda pero no suma. Queda en la auditoría y emite expense.recorded. Owner\u002Fmanager o scope expenses:record: queda approved. Staff (expenses:record_own, F4-74): queda pending_approval y no suma hasta que owner\u002Fmanager lo aprueben. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: expenses:record Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: ExpenseInput Responses StatusDescription201Importes en unidades menores de la moneda del proyecto (ExpenseView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2688,"title":2689,"titles":2690,"content":2691,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsexpensesexpense_id","GET \u002Fpayments\u002Fexpenses\u002F{expense_id}",[2494],"Ver un gasto F4-79. Un gasto con su estado, comprobante (si tiene), revisión y anulación; es el detalle de un movimiento expense de Movimientos. Owner\u002Fmanager o scope expenses:read; staff (expenses:record_own) solo los que cargó (uno ajeno da 404, igual que uno inexistente). Authentication: API key or dashboard sessionScopes: expenses:read Parameters NameInRequiredTypeDescriptionexpense_idpathYesstring (uuid) Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (ExpenseView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2693,"title":2694,"titles":2695,"content":2696,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#patch-paymentsexpensesexpense_id","PATCH \u002Fpayments\u002Fexpenses\u002F{expense_id}",[2494],"Corregir un gasto F4-73. Solo cambian los campos presentes (null borra nota, método, beneficiario, recurso, servicio o persona). Cada cambio queda en la auditoría con el valor anterior y el nuevo (expense.updated). Un gasto anulado no se edita (409 expense.voided) ni uno rechazado (409 expense.rejected); sin cierre de período. Cada cambio queda también en el historial (GET ...\u002Fedits, F4-74). Moneda, origen y is_test no cambian. Owner\u002Fmanager o scope expenses:record; staff (expenses:record_own) solo los suyos mientras siguen pendientes (409 expense.not_pending; uno ajeno da 404). Authentication: API key or dashboard sessionScopes: expenses:record Parameters NameInRequiredTypeDescriptionexpense_idpathYesstring (uuid) Request body (required) application\u002Fjson: ExpensePatch Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (ExpenseView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2698,"title":2699,"titles":2700,"content":2701,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsexpensesexpense_idapprove","POST \u002Fpayments\u002Fexpenses\u002F{expense_id}\u002Fapprove",[2494],"Aprobar un gasto pendiente F4-74. Un gasto del staff en pending_approval pasa a approved (desde ahora suma) con revisor y fecha; emite expense.approved y queda en el historial y la auditoría. Repetir devuelve el mismo resultado. Un gasto que no está pendiente da 409 expense.not_pending; nadie aprueba lo que cargó (409 expense.self_review, también lo exige la base). Owner\u002Fmanager o scope expenses:approve. Authentication: API key or dashboard sessionScopes: expenses:approve Parameters NameInRequiredTypeDescriptionexpense_idpathYesstring (uuid) Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (ExpenseView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2703,"title":2704,"titles":2705,"content":2706,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsexpensesexpense_idedits","GET \u002Fpayments\u002Fexpenses\u002F{expense_id}\u002Fedits",[2494],"Historial de un gasto F4-74. Cada corrección, aprobación, rechazo o anulación del gasto, de la más vieja a la más nueva: quién (actor_type user o api_key, actor_id), cuándo y los campos que cambiaron con su valor anterior y el nuevo (ids y fechas como texto). Solo se agrega: no se edita ni se borra. Sin cierre de período. Owner\u002Fmanager o scope expenses:read; staff (expenses:record_own) solo el de los gastos que cargó (uno ajeno da 404). Authentication: API key or dashboard sessionScopes: expenses:read Parameters NameInRequiredTypeDescriptionexpense_idpathYesstring (uuid) Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (ExpenseEdits)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2708,"title":2709,"titles":2710,"content":2711,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsexpensesexpense_idreject","POST \u002Fpayments\u002Fexpenses\u002F{expense_id}\u002Freject",[2494],"Rechazar un gasto pendiente F4-74. Un gasto del staff en pending_approval pasa a rejected con motivo obligatorio (review_reason), revisor y fecha; emite expense.rejected y queda en el historial y la auditoría. Rechazado es final: no suma, no se corrige ni se anula (409 expense.rejected); se carga uno nuevo. Repetir con el mismo motivo devuelve el mismo resultado; con otro, 409 expense.review_conflict. Nadie rechaza lo que cargó (409 expense.self_review). Owner\u002Fmanager o scope expenses:approve. Authentication: API key or dashboard sessionScopes: expenses:approve Parameters NameInRequiredTypeDescriptionexpense_idpathYesstring (uuid) Request body (required) application\u002Fjson: ExpenseReject Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (ExpenseView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2713,"title":2714,"titles":2715,"content":2716,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsexpensesexpense_idvoid","POST \u002Fpayments\u002Fexpenses\u002F{expense_id}\u002Fvoid",[2494],"Anular un gasto F4-73. Un gasto nunca se borra: anular deja motivo, autor y fecha y emite expense.voided. Repetir con el mismo motivo devuelve el mismo resultado; con otro motivo, 409 payment.void_conflict. Un gasto rechazado no se anula (409 expense.rejected). Owner\u002Fmanager o scope expenses:void. Authentication: API key or dashboard sessionScopes: expenses:void Parameters NameInRequiredTypeDescriptionexpense_idpathYesstring (uuid) Request body (required) application\u002Fjson: ExpenseVoid Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (ExpenseView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2718,"title":2719,"titles":2720,"content":2721,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsexpenseshigh-amount","GET \u002Fpayments\u002Fexpenses\u002Fhigh-amount",[2494],"Umbral de monto alto de la carga conversada (segunda confirmación) F4-83. Desde cuánto un gasto cargado conversando (Wagy, MCP, bot de equipo) pide una segunda confirmación: el doble del precio mensual del plan del proyecto en su moneda (decisión del dueño, no un número fijo). Sin precio publicado para la moneda, threshold_minor es nulo y todo monto cuenta como alto. Con amount_minor responde además si ese monto alcanza el umbral (inclusive). No escribe nada. Owner\u002Fmanager, staff (que carga los suyos) o scope expenses:record. El número (threshold_minor) solo lo recibe el owner o una API key que emitió el owner (rol vigente): ver el plan es solo suyo. Manager, staff y las demás keys reciben threshold_minor: null y usan high. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: expenses:record Parameters NameInRequiredTypeDescriptionamount_minorqueryNointegerMonto a comparar, en unidad menor de la moneda del proyecto (PYG y CLP sin decimales). Responses StatusDescription200Umbral en unidades menores de la moneda del proyecto (ExpenseHighAmount)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2723,"title":2724,"titles":2725,"content":2726,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsexpensespending","GET \u002Fpayments\u002Fexpenses\u002Fpending",[2494],"Contar los gastos por aprobar F4-74. Contador de quien aprueba: cantidad y suma de los gastos del staff en pending_approval, sin los de prueba, en unidad menor de la moneda del proyecto. Owner\u002Fmanager o scope expenses:approve. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: expenses:approve Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (ExpensePending)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2728,"title":2729,"titles":2730,"content":2731,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceaccounts","GET \u002Fpayments\u002Ffinance\u002Faccounts",[2494],"Cuentas que componen el saldo actual o el crédito del Resumen Proyección canónica F4-35, sin filtro de período. Owner\u002Fmanager o scope finance:analyze; nunca staff. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptionbalancequeryNostring debt, credit default debtcursorqueryNostring (null) (uuid)limitqueryNointeger default 50 Responses StatusDescription200Cuentas con saldo del signo seleccionado, paginadas por cliente (FinanceAccounts)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2733,"title":2734,"titles":2735,"content":2736,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceavailability","GET \u002Fpayments\u002Ffinance\u002Favailability",[2494],"Finance Availability Tenant desde credencial; unidades menores de la moneda del negocio. Staff solo recibos y caja propios. Ver docs\u002Fapi\u002Ffinanciero.md. Authentication: API key or dashboard sessionScopes: payments:read Responses StatusDescription200Successful Response (FinanceAvailability)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2738,"title":2739,"titles":2740,"content":2741,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinancecollections","GET \u002Fpayments\u002Ffinance\u002Fcollections",[2494],"Finance Collections F4-26. Números de cobros del período por fecha local de cobro, en la moneda y zona del proyecto: bruto, devuelto, comisión del proveedor (Mercado Pago, fee_details), comisión de Fiuit y neto; por método, servicio y día\u002Fsemana; y lo estimado (completado sin ningún cobro). Solo lectura. Owner\u002Fmanager o scope finance:analyze; staff\u002Fviewer cerrados. Sin anulados ni de prueba. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)service_idqueryNostring \u002F null (null)resource_idqueryNostring \u002F null (null)granularityqueryNostring day, week default day Responses StatusDescription200Successful Response (Collections)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2743,"title":2744,"titles":2745,"content":2746,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinancecollectionsexport","GET \u002Fpayments\u002Ffinance\u002Fcollections\u002Fexport",[2494],"Finance Collections Export F4-26. CSV de conciliación de cobros por fecha local de cobro: bruto, devuelto, comisión del proveedor (y si fue informada), comisión de Fiuit, neto e id del pago en el proveedor. Owner\u002Fmanager o API key con finance:analyze y finance:export; staff\u002Fviewer cerrados. Sin anulados ni de prueba. Authentication: API key or dashboard sessionScopes: finance:analyze, finance:export Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)service_idqueryNostring \u002F null (null)resource_idqueryNostring \u002F null (null) Responses StatusDescription200CSV auditado (finance.collections_exported), un cobro por fila, en streaming. Máximo 50000 filas; si las supera responde 409 finance.export_too_large antes de enviar datos. (string)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2748,"title":2749,"titles":2750,"content":2751,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinancecustomers","GET \u002Fpayments\u002Ffinance\u002Fcustomers",[2494],"Finance Customers Lectura de valores congelados y cuenta F4-35. Owner\u002Fmanager o scope finance:analyze; staff\u002Fviewer cerrados. Importes en unidad menor, sin PII adicional. Datos actuales, estimaciones rotuladas. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptionoffsetqueryNointeger default 0limitqueryNointeger default 50at_riskqueryNoboolean default false Responses StatusDescription200Successful Response (CustomerFinancePage)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2753,"title":2754,"titles":2755,"content":2756,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinancecustomerscustomer_id","GET \u002Fpayments\u002Ffinance\u002Fcustomers\u002F{customer_id}",[2494],"Finance Customer Lectura de valores congelados y cuenta F4-35. Owner\u002Fmanager o scope finance:analyze; staff\u002Fviewer cerrados. Importes en unidad menor, sin PII adicional. Datos actuales, estimaciones rotuladas. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid) Responses StatusDescription200Successful Response (CustomerFinancePage)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2758,"title":2759,"titles":2760,"content":2761,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinancedebt","GET \u002Fpayments\u002Ffinance\u002Fdebt",[2494],"Finance Debt Lectura de valores congelados y cuenta F4-35. Owner\u002Fmanager o scope finance:analyze; staff\u002Fviewer cerrados. Importes en unidad menor, sin PII adicional. Datos actuales, estimaciones rotuladas. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptionoffsetqueryNointeger default 0limitqueryNointeger default 50customer_idqueryNostring \u002F null (null)completed_onlyqueryNoboolean default false Responses StatusDescription200Successful Response (FinanceDebt)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2763,"title":2764,"titles":2765,"content":2766,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceexport","GET \u002Fpayments\u002Ffinance\u002Fexport",[2494],"Finance Export Tenant desde credencial; unidades menores de la moneda del negocio. Staff solo recibos y caja propios. Ver docs\u002Fapi\u002Ffinanciero.md. Authentication: API key or dashboard sessionScopes: finance:export, payments:read Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)customer_idqueryNostring \u002F null (null)member_idqueryNostring \u002F null (null)methodqueryNostring \u002F null (null)statusqueryNostring \u002F null (null)kindqueryNostring \u002F null (null)groupqueryNostring \u002F null (null)F4-79, chips de Movimientos: collections = cobros y caja (sin gastos ni comisiones de cobro), expenses = gastos cargados, commissions = comisiones de cobro. Sin valor: todo.searchqueryNostring \u002F null (null)tag_idqueryNostring \u002F null (null)FIU-324. Solo los gastos con esa etiqueta (cobros y comisiones no llevan etiquetas). La búsqueda (search) también encuentra gastos por el nombre de sus etiquetas.cursorqueryNostring \u002F null (null)limitqueryNointeger default 50 Responses StatusDescription200CSV auditado con filtros, permisos y orden idénticos al libro, enviado en streaming (una sola consulta leída por lotes). Máximo 50000 filas; si las supera responde 409 finance.export_too_large antes de enviar datos. (string)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2768,"title":2769,"titles":2770,"content":2771,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceforecast","GET \u002Fpayments\u002Ffinance\u002Fforecast",[2494],"Finance Forecast Lectura de valores congelados y cuenta F4-35. Owner\u002Fmanager o scope finance:analyze; staff\u002Fviewer cerrados. Importes en unidad menor, sin PII adicional. Datos actuales, estimaciones rotuladas. Authentication: API key or dashboard sessionScopes: finance:analyze Responses StatusDescription200Successful Response (FinanceForecast)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2773,"title":2774,"titles":2775,"content":2776,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinancemovements","GET \u002Fpayments\u002Ffinance\u002Fmovements",[2494],"Finance Movements Tenant desde credencial; unidades menores de la moneda del negocio. Staff solo recibos y caja propios. Ver docs\u002Fapi\u002Ffinanciero.md. Authentication: API key or dashboard sessionScopes: payments:read Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)customer_idqueryNostring \u002F null (null)member_idqueryNostring \u002F null (null)methodqueryNostring \u002F null (null)statusqueryNostring \u002F null (null)kindqueryNostring \u002F null (null)groupqueryNostring \u002F null (null)F4-79, chips de Movimientos: collections = cobros y caja (sin gastos ni comisiones de cobro), expenses = gastos cargados, commissions = comisiones de cobro. Sin valor: todo.searchqueryNostring \u002F null (null)tag_idqueryNostring \u002F null (null)FIU-324. Solo los gastos con esa etiqueta (cobros y comisiones no llevan etiquetas). La búsqueda (search) también encuentra gastos por el nombre de sus etiquetas.cursorqueryNostring \u002F null (null)limitqueryNointeger default 50 Responses StatusDescription200Successful Response (FinanceMovements)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2778,"title":2779,"titles":2780,"content":2781,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceoverview","GET \u002Fpayments\u002Ffinance\u002Foverview",[2494],"Resumen mensual de Dinero F4-80. Para el gráfico del Inicio: Entró \u002F Salió \u002F Quedó realizados de los 2 períodos anteriores y del actual (hasta hoy) y, en el actual y el siguiente, lo que falta, siempre una suma de cosas con fecha: tareas agendadas (lo ya recibido de pago o seña antes del período es «seguro»; el saldo, «previsto»), gastos recurrentes que vencen («seguros»), comisión del equipo estimada sobre esas tareas y gastos por aprobar («previstos»). period: month, week (lunes a domingo) o day (solo hoy). La comisión de cobro no se estima y los saldos por cobrar no tienen vencimiento: ambos se avisan en notes. Solo lectura. Owner\u002Fmanager o scope finance:analyze; staff\u002Fviewer cerrados. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptionperiodqueryNostring day, week, month default month Responses StatusDescription200Successful Response (FinanceOverview)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2783,"title":2784,"titles":2785,"content":2786,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinancereport-evidence","GET \u002Fpayments\u002Ffinance\u002Freport-evidence",[2494],"Finance Report Evidence Lectura de valores congelados y cuenta F4-35. Owner\u002Fmanager o scope finance:analyze; staff\u002Fviewer cerrados. Importes en unidad menor, sin PII adicional. Datos actuales, estimaciones rotuladas. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)dimensionqueryNostring service, customer, member, method, weekday, hour, zone, channel, origin, cohort default servicekeyqueryNostring \u002F null (null)offsetqueryNointeger default 0limitqueryNointeger default 50 Responses StatusDescription200Successful Response (ReportEvidence)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2788,"title":2789,"titles":2790,"content":2791,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinancereports","GET \u002Fpayments\u002Ffinance\u002Freports",[2494],"Finance Reports Lectura de valores congelados y cuenta F4-35. Owner\u002Fmanager o scope finance:analyze; staff\u002Fviewer cerrados. Importes en unidad menor, sin PII adicional. Datos actuales, estimaciones rotuladas. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)dimensionqueryNostring service, customer, member, method, weekday, hour, zone, channel, origin, cohort default servicekeyqueryNostring \u002F null (null)offsetqueryNointeger default 0limitqueryNointeger default 50 Responses StatusDescription200Successful Response (FinanceReport)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2793,"title":2794,"titles":2795,"content":2796,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceresult","GET \u002Fpayments\u002Ffinance\u002Fresult",[2494],"Resultado del período F4-76. Resultado con base caja en la moneda y zona del proyecto: Entró (cobrado menos devuelto, misma población que finance\u002Fcollections: sin anulados, de prueba, en revisión ni cobros con devolución parcial de monto desconocido), Salió (gastos aprobados + línea calculada de comisiones del equipo + línea calculada de comisiones de cobro informadas) y Quedó, con margen, vendido como dato secundario y comparación contra el período anterior. group_by period (día o semana), resource, service o category; filtros service_id y resource_id. Gastos sin recurso o servicio = «General» (key null), sin prorrateo; los ajustes manuales de comisión van al recurso de la persona ese día (por servicio, a «General»). Advertencias: missing_expenses, refund_amount_unavailable, provider_fee_unknown, resource_overlap. Solo lectura. Owner\u002Fmanager o scope finance:analyze; staff\u002Fviewer cerrados. 409 finance.invalid_period. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)service_idqueryNostring \u002F null (null)resource_idqueryNostring \u002F null (null)group_byqueryNostring period, resource, service, category default periodgranularityqueryNostring day, week default day Responses StatusDescription200Successful Response (FinanceResult)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2798,"title":2799,"titles":2800,"content":2801,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceresultexport","GET \u002Fpayments\u002Ffinance\u002Fresult\u002Fexport",[2494],"Exportar el Resultado (XLSX para el contador o CSV) F4-81. Los números del Resultado (GET \u002Fpayments\u002Ffinance\u002Fresult) como archivo, sin recalcular. CSV: un movimiento por renglón (cobro, devolución, comisión de cobro, comisión del equipo, gasto) con kind, category, resource, service, member, customer, amount en decimales legibles y amount_minor; la suma de amount_minor es el result_minor del período. UTF-8 con BOM; separador ; y coma decimal si la moneda usa coma (BRL, ARS, CLP, COP, PYG, UYU, EUR), , y punto si no (MXN, PEN, USD). PYG y CLP sin decimales. Fechas: día local del proyecto. XLSX: hojas Resumen, Movimientos, Por categoría, Por recurso, Por servicio, Comisiones y Cobros electrónicos (bruto, comisión, neto e id del pago en Mercado Pago). Textos con = + - @ al inicio llevan apóstrofo. Owner\u002Fmanager o API key con finance:analyze y finance:export; staff\u002Fviewer cerrados. receipt_url va vacío: el comprobante de cada gasto viaja en el paquete ZIP (POST \u002Fpayments\u002Ffinance\u002Fresult\u002Fpackages), donde la columna dice su archivo. PDF (F4-82): una hoja A4 con Entró, Salió y Quedó, el detalle, las 5 categorías que más salieron, los avisos y un espacio para firma; importes con el formato de la moneda (PYG con su código). Authentication: API key or dashboard sessionScopes: finance:analyze, finance:export Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)service_idqueryNostring \u002F null (null)resource_idqueryNostring \u002F null (null)formatqueryNostring xlsx, csv, pdf default xlsxxlsx: libro con 7 hojas; csv: solo los movimientos (UTF-8 con BOM); pdf: resumen de una hoja (Entró, Salió, Quedó, top categorías y firma, F4-82)langqueryNostring \u002F null (null)Idioma de hojas, encabezados del XLSX y etiquetas; por defecto, el del proyecto Responses StatusDescription200Archivo auditado (finance.exported con report: result), transmitido en partes. Máximo 50000 renglones; si los supera responde 409 finance.export_too_large antes de enviar datos. El encabezado X-Export-Rows trae la cantidad de movimientos. (string)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2803,"title":2804,"titles":2805,"content":2806,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceresultlines","GET \u002Fpayments\u002Ffinance\u002Fresult\u002Flines",[2494],"Composición de un número del Resultado F4-80. Los renglones que suman un número del Resultado (los mismos que exporta finance\u002Fresult\u002Fexport): cobros (income), devoluciones (refund), comisiones de cobro (payment_fee), comisiones del equipo calculadas (staff_commission) y gastos aprobados (expense), con signo y por día local. Mismos filtros que finance\u002Fresult; row abre una fila de group_by (general = «General»), side el lado Entró (in) o Salió (out) y kind un renglón del DRE. total_minor suma todos los que cumplen el filtro (data trae hasta limit, más reciente primero): Entró, -Salió, Quedó o el resultado de la fila. Solo lectura. Owner\u002Fmanager o scope finance:analyze; customer_name con API key solo con customer_account:read. 409 finance.invalid_period. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)service_idqueryNostring \u002F null (null)resource_idqueryNostring \u002F null (null)group_byqueryNostring period, resource, service, category default periodgranularityqueryNostring day, week default dayrowqueryNostring \u002F null (null)key de una fila de group_by (fecha, id de recurso o servicio, key de categoría); general = la fila «General» (key null). Sin row, todo el períodosidequeryNostring \u002F null (null)in: lo que compone Entró (cobros y devoluciones); out: lo que compone SaliókindqueryNostring \u002F null (null)Solo un tipo de renglón (un renglón del DRE)limitqueryNointeger default 200Renglones a devolver; el total suma todos Responses StatusDescription200Successful Response (FinanceResultLines)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2808,"title":2809,"titles":2810,"content":2811,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceresultpackages","GET \u002Fpayments\u002Ffinance\u002Fresult\u002Fpackages",[2494],"Mis paquetes para el contador F4-82. Cada persona (o key) ve solo sus paquetes. Owner\u002Fmanager o API key con finance:analyze y finance:export. Authentication: API key or dashboard sessionScopes: finance:analyze, finance:export Responses StatusDescription200Los últimos 20 paquetes de quien consulta (sesión o API key), los más nuevos primero (FinancePackages)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2813,"title":2814,"titles":2815,"content":2816,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsfinanceresultpackages","POST \u002Fpayments\u002Ffinance\u002Fresult\u002Fpackages",[2494],"Pedir el paquete ZIP para el contador del período F4-82. Un ZIP con el XLSX de GET \u002Fpayments\u002Ffinance\u002Fresult\u002Fexport (las 7 hojas, con la columna «Comprobante» apuntando al archivo dentro del ZIP), el PDF de resumen de una hoja (format=pdf) y los comprobantes de los gastos aprobados del período, con nombre AAAA-MM-DD_\u003Cmonto>_\u003Ccategoria>.\u003Cext> en la carpeta comprovantes\u002F, comprobantes\u002F o receipts\u002F según lang. Mismos números que el Resultado, sin recalcular. Los comprobantes solo van si lo pide una sesión (owner\u002Fmanager): con API key el paquete lleva XLSX y PDF (receipts_included: false). Si es chico (hasta 2000 renglones y 20 comprobantes que suman 5 MB) responde 201 listo; si no, 202 pending y lo arma el worker. Topes: 50000 renglones (409 finance.export_too_large), 1000 comprobantes y 100 MB de comprobantes (409 finance.package_too_large); un paquete abierto por persona (409 finance.package_in_progress). El archivo vence a las 48 h. Auditado (finance.exported con report: package). Authentication: API key or dashboard sessionScopes: finance:analyze, finance:export Request body (required) application\u002Fjson: FinancePackageInput Responses StatusDescription201Paquete chico, armado en el momento (status done, con download_url) (FinancePackageView)202Paquete grande, lo arma el worker (status pending); se avisa a quien lo pidió al terminar (FinancePackageView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2818,"title":2819,"titles":2820,"content":2821,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceresultpackagespackage_id","GET \u002Fpayments\u002Ffinance\u002Fresult\u002Fpackages\u002F{package_id}",[2494],"Estado de un paquete F4-82. El paquete de otra persona o de otro proyecto responde 404 finance.package_not_found. Authentication: API key or dashboard sessionScopes: finance:analyze, finance:export Parameters NameInRequiredTypeDescriptionpackage_idpathYesstring (uuid) Responses StatusDescription200Estado y, si está listo, un link de descarga firmado nuevo (vale 5 minutos) (FinancePackageView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2823,"title":2824,"titles":2825,"content":2826,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinanceresultpackagespackage_iddownload","GET \u002Fpayments\u002Ffinance\u002Fresult\u002Fpackages\u002F{package_id}\u002Fdownload",[2494],"Bajar el ZIP con el link firmado F4-82. Usá el download_url de GET \u002Fpayments\u002Ffinance\u002Fresult\u002Fpackages\u002F{package_id} tal cual, con la misma sesión o API key que lo pidió. Link vencido o adulterado → 403 finance.package_link_invalid; paquete vencido → 404 finance.package_expired; todavía armándose → 404 finance.package_not_ready. Authentication: API key or dashboard sessionScopes: finance:analyze, finance:export Parameters NameInRequiredTypeDescriptionpackage_idpathYesstring (uuid)expiresqueryYesintegersignaturequeryYesstring Responses StatusDescription200El ZIP (verificado por sha256). Auditado como finance.package_downloaded. (string)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2828,"title":2829,"titles":2830,"content":2831,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinancesummary","GET \u002Fpayments\u002Ffinance\u002Fsummary",[2494],"Finance Summary Tenant desde credencial; unidades menores de la moneda del negocio. Staff solo recibos y caja propios. Ver docs\u002Fapi\u002Ffinanciero.md. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptiongranularityqueryNostring day, week default daystartqueryYesstring (date)endqueryYesstring (date) Responses StatusDescription200Successful Response (FinanceSummary)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2833,"title":2834,"titles":2835,"content":2836,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsfinancetasks","GET \u002Fpayments\u002Ffinance\u002Ftasks",[2494],"Finance Tasks Tenant desde credencial; unidades menores de la moneda del negocio. Staff solo recibos y caja propios. Ver docs\u002Fapi\u002Ffinanciero.md. Authentication: API key or dashboard sessionScopes: finance:analyze Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)customer_idqueryNostring \u002F null (null)member_idqueryNostring \u002F null (null)methodqueryNostring \u002F null (null)statusqueryNostring \u002F null (null)kindqueryNostring \u002F null (null)groupqueryNostring \u002F null (null)F4-79, chips de Movimientos: collections = cobros y caja (sin gastos ni comisiones de cobro), expenses = gastos cargados, commissions = comisiones de cobro. Sin valor: todo.searchqueryNostring \u002F null (null)cursorqueryNostring \u002F null (null)limitqueryNointeger default 50 Responses StatusDescription200Successful Response (FinanceTasks)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2838,"title":2839,"titles":2840,"content":2841,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsmanual","POST \u002Fpayments\u002Fmanual",[2494],"Record Manual Cobro unificado (F3-492), el único comando para registrar un pago recibido fuera de la pasarela, de una tarea o seña (allocations) o a cuenta del cliente (sin allocations); la venta y renovación de un plan lo usan por dentro. method es obligatorio (cash, card, transfer, pix, mercadopago = recibido por Mercado Pago fuera de Fiuit, other). audit_log payment.recorded guarda quién, monto, forma de pago, propósito y origen (task, account o plan). Tenant desde credencial. Scope payments:record; cookie + CSRF. Bearer exige Idempotency-Key en todos los POST (máximo 128 caracteres); conflicto del ledger Bearer es 422, conflicto de dominio 409. Owner\u002Fmanager; staff solo tareas asignadas (no anula ni ajusta) y solo si el dueño no apagó «El repartidor puede cobrar» (staff_can_collect, encendido por defecto; apagado por el dueño, 403). Sin llamadas a proveedores. Montos enteros minor units, PYG exponente 0. Clave de registro permanente; misma clave con otros datos devuelve 409. Duplicados por tarea\u002Fmonto\u002Fmétodo en ventana UTC de 5 minutos se rechazan. Los cobros paid aplicados a una tarea se suman con los de pasarela; al cubrir la seña requerida, pending_payment pasa a confirmed de forma auditada e idempotente. El crédito a cuenta sin asignar no confirma. Una tarea cubierta rechaza ajustes de cobro y asignaciones manuales (409 payment_conflict, detail payment.booking_covered_by_plan); primero quitar el plan. Una tarea que queda pagada por completo con este cobro (efectivo o transferencia) también hace avanzar la etapa con la salida «Avanza sola al recibir el pago» (#1064), igual que un cobro de Mercado Pago; un pago parcial no la mueve. FIU-473 impide imputar un adicional de presupuesto sin aprobar (409 payment_conflict, detail payment.quote_pending), incluso con allow_overpayment. Se puede registrar dinero recibido sin imputarlo a esa diferencia; lo ya imputado se conserva. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstring Request body (required) application\u002Fjson: RecordManual Responses StatusDescription201Successful Response (ManualView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2843,"title":2844,"titles":2845,"content":2846,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsmanualcharge_idallocations","POST \u002Fpayments\u002Fmanual\u002F{charge_id}\u002Fallocations",[2494],"Allocate Manual Tenant desde credencial. Scope payments:record; cookie + CSRF. Bearer exige Idempotency-Key en todos los POST (máximo 128 caracteres); conflicto del ledger Bearer es 422, conflicto de dominio 409. Owner\u002Fmanager; staff solo tareas asignadas (no anula ni ajusta) y solo si el dueño no apagó «El repartidor puede cobrar» (staff_can_collect, encendido por defecto; apagado por el dueño, 403). Sin llamadas a proveedores. Montos enteros minor units, PYG exponente 0. Clave de registro permanente; misma clave con otros datos devuelve 409. Duplicados por tarea\u002Fmonto\u002Fmétodo en ventana UTC de 5 minutos se rechazan. Asignar un recibo paid concilia la seña; el total manual aplicado más pasarela debe alcanzar la seña para confirmar; replay no duplica confirmación ni avisos. Una tarea cubierta rechaza ajustes de cobro y asignaciones manuales (409 payment_conflict, detail payment.booking_covered_by_plan); primero quitar el plan. En FIU-473, la imputación respeta el último presupuesto aceptado; un adicional pendiente o rechazado devuelve 409 payment_conflict con detail payment.quote_pending, incluso con allow_overpayment. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncharge_idpathYesstring (uuid)Idempotency-KeyheaderNostring \u002F null (null) Request body (required) application\u002Fjson: AllocationInput Responses StatusDescription200Successful Response (ManualView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2848,"title":2849,"titles":2850,"content":2851,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsmanualcharge_idvoid","POST \u002Fpayments\u002Fmanual\u002F{charge_id}\u002Fvoid",[2494],"Void Manual Tenant desde credencial. Scope payments:void; cookie + CSRF. Bearer exige Idempotency-Key en todos los POST (máximo 128 caracteres); conflicto del ledger Bearer es 422, conflicto de dominio 409. Owner\u002Fmanager; staff solo tareas asignadas (no anula ni ajusta). Sin llamadas a proveedores. Montos enteros minor units, PYG exponente 0. Clave de registro permanente; misma clave con otros datos devuelve 409. Duplicados por tarea\u002Fmonto\u002Fmétodo en ventana UTC de 5 minutos se rechazan. Si el total válido queda debajo de la seña, una tarea confirmed con payment_status paid vuelve a pending_payment únicamente antes de iniciar y antes de start_at (si existe). Conserva horario y capacidad, sin nuevo vencimiento; no reabre estados iniciados o terminales. Reembolso parcial sin monto conciliado impide deducir el faltante. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptioncharge_idpathYesstring (uuid)Idempotency-KeyheaderNostring \u002F null (null) Request body (required) application\u002Fjson: ReasonInput Responses StatusDescription200Successful Response (ManualView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2853,"title":2854,"titles":2855,"content":2856,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentspayment-linksavailability","GET \u002Fpayments\u002Fpayment-links\u002Favailability",[2494],"¿Se puede cobrar con link? F4-20. Permiso y scope payments:link. Solo available y el motivo (reason, los de MercadoPagoMethodView); sin datos de la cuenta. El panel muestra «Cobrar» solo si está disponible. Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200Successful Response (PaymentLinkAvailability)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)",{"id":2858,"title":2859,"titles":2860,"content":2861,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentsrecurring-expenses","GET \u002Fpayments\u002Frecurring-expenses",[2494],"Gastos que se repiten F4-75. Los gastos recurrentes del proyecto (alquiler, sueldos fijos, servicios) con su próxima fecha (next_on, día local) y status (active, paused, ended). Owner\u002Fmanager o scope expenses:read. Authentication: API key or dashboard sessionScopes: expenses:read Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (RecurringPage)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2863,"title":2864,"titles":2865,"content":2866,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsrecurring-expenses","POST \u002Fpayments\u002Frecurring-expenses",[2494],"Crear un gasto que se repite cada semana o cada mes F4-75. cadence weekly (day 1 lunes … 7 domingo) o monthly (day 1-31; en meses más cortos, el último día). Importe en unidad menor de la moneda del proyecto (currency obligatoria e igual; mismo tope que los gastos). starts_on por defecto hoy, como mucho un año para atrás (409 expense_recurring.starts_too_early); ends_on opcional. Cada fecha que toca carga un gasto aprobado con source: recurring y recurring_id, el mismo día (lo que ya tocaba desde starts_on se carga al crear); nunca dos veces la misma fecha, aunque haya reintentos o dos procesos a la vez. Sin nómina: un sueldo fijo es un recurrente de «Sueldos». «Comisiones del equipo» no se carga (409 expense.computed_category). Idempotency-Key obligatoria: misma clave y cuerpo devuelve el mismo recurrente; otro cuerpo, 409 payment.idempotency_conflict. Auditado. Owner\u002Fmanager o scope expenses:record. Authentication: API key or dashboard sessionScopes: expenses:record Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstring Request body (required) application\u002Fjson: RecurringInput Responses StatusDescription201Importes en unidades menores de la moneda del proyecto (RecurringView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2868,"title":2869,"titles":2870,"content":2871,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#patch-paymentsrecurring-expensesrecurring_id","PATCH \u002Fpayments\u002Frecurring-expenses\u002F{recurring_id}",[2494],"Cambiar, pausar, reanudar o terminar un gasto que se repite F4-75. Cambia lo que viene de acá en adelante: los gastos ya cargados no se tocan (se corrigen o anulan como cualquier gasto). paused: true no genera; al reanudar sigue desde hoy (lo pausado no se recupera). Cambiar cadence o day recalcula desde hoy; ends_on termina (status: ended) y quitarlo lo retoma. Auditado con antes y después. Owner\u002Fmanager o scope expenses:record. Authentication: API key or dashboard sessionScopes: expenses:record Parameters NameInRequiredTypeDescriptionrecurring_idpathYesstring (uuid)Idempotency-KeyheaderNostring Request body (required) application\u002Fjson: RecurringPatch Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (RecurringView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2873,"title":2874,"titles":2875,"content":2876,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentsrecurring-expensesrecurring_idskip","POST \u002Fpayments\u002Frecurring-expenses\u002F{recurring_id}\u002Fskip",[2494],"Saltear la próxima fecha de un gasto que se repite F4-75. on tiene que ser la próxima fecha (next_on): pasa a la siguiente sin cargar el gasto. Repetirlo no saltea otra; una fecha posterior da 409 expense_recurring.not_next, una ya cargada 409 expense_recurring.already_recorded (se anula el gasto) y un recurrente terminado 409 expense_recurring.ended. Auditado. Owner\u002Fmanager o scope expenses:record. Authentication: API key or dashboard sessionScopes: expenses:record Parameters NameInRequiredTypeDescriptionrecurring_idpathYesstring (uuid)Idempotency-KeyheaderNostring Request body (required) application\u002Fjson: RecurringSkip Responses StatusDescription200Importes en unidades menores de la moneda del proyecto (RecurringView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2878,"title":2879,"titles":2880,"content":2881,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#get-paymentstask-margins","GET \u002Fpayments\u002Ftask-margins",[2494],"Margen por tarea (líneas con costo) FIU-472: finance:analyze y, desde FIU-597, tasks:costs (por defecto solo el dueño; una API key, con payments:read_balance). Precio - costo de las líneas con costo cargado, por\ntarea; una tarea sin ningún costo no aparece (no se muestra 100 % de margen). FIU-472: margen por tarea en Dinero, finance:analyze y tasks:costs (FIU-597: por defecto solo el dueño; el resto, 403). Precio menos costo de las líneas con costo cargado; una tarea sin ningún costo no aparece (nunca un 100 %). margin_bp: puntos básicos (2500 = 25,00 %). Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200Successful Response (TaskMargins)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2883,"title":2884,"titles":2885,"content":2886,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentstips","POST \u002Fpayments\u002Ftips",[2494],"Registrar una propina Propina para un profesional: no es venta del negocio ni base de comisión. Staff solo para sí (si el negocio permite que cobre); una API key debe indicar member_id. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: payments:record Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstringUUID único por operación; reintentos con la misma key devuelven el mismo resultado durante 24 h. Request body (required) application\u002Fjson: TipInput Responses StatusDescription201Importes en unidades menores de la moneda del negocio (TipView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2888,"title":2889,"titles":2890,"content":2891,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fpayments#post-paymentstipstip_idvoid","POST \u002Fpayments\u002Ftips\u002F{tip_id}\u002Fvoid",[2494],"Anular una propina Con motivo; resta el día en que se anula. Owner\u002Fmanager. No usa workspace_id externo. Authentication: API key or dashboard sessionScopes: payments:void Parameters NameInRequiredTypeDescriptiontip_idpathYesstring (uuid) Request body (required) application\u002Fjson: ReasonInput Responses StatusDescription200Importes en unidades menores de la moneda del negocio (TipView)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2893,"title":2894,"titles":2895,"content":2896,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fstats","API · stats",[],"stats operations in the OpenAPI contract that accept an API key.",{"id":2898,"title":2899,"titles":2900,"content":2901,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fstats#get-controlsummary","GET \u002Fcontrol\u002Fsummary",[2894],"Panel de control - snapshot con filtros (owner y manager; staff y viewer 403) Snapshot de solo lectura del proyecto (F3-234), calculado en el servidor en una transacción con el tenant de la credencial, con una única vista temporal REPEATABLE READ para todos los bloques. Filtros (service_id, resource_id, from, to; días locales incluidos, por defecto hoy, máximo el mismo tope que \u002Fteam\u002Foverview, 422 invalid_stats_range) para todos los bloques: servicio y persona limitan las tareas, los montos, los pagos en revisión y la saturación; las fechas, lo que tiene fecha. Atención ahora (es «ahora», sin fechas) - conversaciones que esperan respuesta (misma regla que «Necesita atención» del Inbox; no pertenecen a un servicio ni a una persona, no se filtran) y las derivadas por el bot (bot_handoff\u002Fbot_fallback), tareas por motivo con los mismos filtros de GET \u002Fwork-items que usa Hoy (pueden solaparse: no se suman) y cobros electrónicos pending. En curso - tareas del período en pending_payment, confirmed o checked_in, por etapa nativa de cada servicio (service_id identifica la clave), según el estado real de la tarea. Números del período - agendadas, completadas y, con finance:analyze, vendido por fecha de trabajo y cobrado por fecha del pago (incluye tareas trabajadas fuera del período). Pagos en revisión sin fechas. (sin filtro, GET \u002Fpayments\u002Ffinance\u002Fsummary; con servicio o persona, atribuidos a esas tareas) y por cobrar (saldo de cuentas al momento; null con filtro de servicio o persona), en unidad menor de currency. Saturación - ocupación (minutos reservados sobre disponibles del horario, como \u002Fresources\u002F{id}\u002Fstats) por día de la semana y hora local, sumando los recursos activos con horario o el recurso filtrado. Permisos por bloque - sesión, control:read y la matriz por rol; API key, bookings:read, el bloque de conversaciones exige messages:read y el de dinero finance:analyze (sin ellos llegan null). Sin PII. Authentication: API key or dashboard sessionScopes: bookings:read, control:read, messages:read Parameters NameInRequiredTypeDescriptionservice_idqueryNostring (uuid)resource_idqueryNostring (uuid)Persona o recurso (staff = su recurso)fromqueryNostring (date)Primer día local (por defecto hoy)toqueryNostring (date)Último día local incluido (por defecto from) Responses StatusDescription200OK (ControlSummary)defaultError (RFC 9457) (Problem)",{"id":2903,"title":2904,"titles":2905,"content":2906,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fstats#get-productsidperformance","GET \u002Fproducts\u002F{id}\u002Fperformance",[2894],"Rendimiento de un producto en unidades y tareas por día, semana o mes, con el período anterior F3-328. Rendimiento de un producto en CANTIDADES (nunca dinero: vive en Financiero). Panel: permiso performance:read (owner, manager y colaborador; no es de dinero; el colaborador solo sobre lo suyo: scope: own, las tareas asignadas a los recursos enlazados a su usuario, nunca los totales del negocio); API key: scope bookings:read (totales del negocio). Líneas del pedido de tareas completadas, no de prueba, con el criterio de GET \u002Fproducts\u002Fstats: units (por defecto, Σ qty) y tasks. Período anterior y tramos como en GET \u002Fservices\u002F{id}\u002Fperformance. Máximo 366 días; una consulta agrupada. Authentication: API key or dashboard sessionScopes: performance:read, bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)fromqueryYesstring (date)Primer día local del negocio (incluido)toqueryYesstring (date)Último día local del negocio (incluido)granularityqueryNostring day, week, month default dayTramo de la serie: day, week (lunes) o month Responses StatusDescription200Successful Response (ItemPerformanceOut)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2908,"title":2909,"titles":2910,"content":2911,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fstats#get-resourcesidstats","GET \u002Fresources\u002F{id}\u002Fstats",[2894],"Estadísticas de un recurso (owner, manager, staff solo el suyo; viewer 403) Ocupación por día y, con granularity=hour, matriz día de la semana × hora local (mapa de calor); cantidad de agendas por estado y tasas de ausencia y cancelación; mezcla de servicios; y facturación (suma de price_cents de servicios completados, seña cobrada y pendiente, moneda del negocio). revenue es null para el rol staff. Las reservas is_test se excluyen. Otro tenant o, para staff, un recurso ajeno: 404. Mismas reglas de rango y ocupación que \u002Fteam\u002Foverview. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstringfromqueryYesstring (date)toqueryYesstring (date)granularityqueryNostring hour, day default day Responses StatusDescription200OK (ResourceStats)defaultError (RFC 9457) (Problem)",{"id":2913,"title":2914,"titles":2915,"content":2916,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fstats#get-servicesidperformance","GET \u002Fservices\u002F{id}\u002Fperformance",[2894],"Rendimiento de un servicio en cantidades por día, semana o mes, con el período anterior F3-328. Rendimiento de un servicio en CANTIDADES (nunca dinero: vive en Financiero). Tenant desde la credencial, RLS. Panel: permiso performance:read (owner, manager y colaborador; no es de dinero). El colaborador lo tiene solo sobre lo suyo (scope: own: tareas asignadas a los recursos enlazados a su usuario; sin recurso propio, cero), nunca los totales del negocio, que son de owner y manager (scope: business); API key: scope bookings:read (totales del negocio). Tareas sin held\u002Fexpired ni de prueba, atribuidas al día local de inicio\u002Fvencimiento. Métricas: completed (por defecto), tasks y cancelled (cancelada o no vino). previous: el mismo período corrido hacia atrás tantos tramos como abarca (día: N días; semana: N semanas; mes: N meses), así previous_series tiene los mismos tramos que series. Máximo 366 días; una consulta agrupada. Authentication: API key or dashboard sessionScopes: performance:read, bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)fromqueryYesstring (date)Primer día local del negocio (incluido)toqueryYesstring (date)Último día local del negocio (incluido)granularityqueryNostring day, week, month default dayTramo de la serie: day, week (lunes) o month Responses StatusDescription200Successful Response (ItemPerformanceOut)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2918,"title":2919,"titles":2920,"content":2921,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fstats#get-servicesidstats","GET \u002Fservices\u002F{id}\u002Fstats",[2894],"Ventas y tendencia de un servicio F3-90. Tenant desde credencial, RLS. Owner\u002Fmanager o API key con bookings:read. Staff\u002Fviewer: 403. Fecha local de inicio\u002Fvencimiento; moneda del workspace. Dinero estimado con precio actual del catálogo y señas retenidas (F2-44\u002F45), no charges. Máximo 366 días. Excluye datos de prueba, held y expired. units_sold informa un único campo con x-fiuit-unit; null si hay varios campos o ninguna unidad. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)fromqueryYesstring (date)Primer día local del negocio (incluido)toqueryYesstring (date)Último día local del negocio (incluido)granularityqueryNostring day, week, month default day Responses StatusDescription200Successful Response (ServiceSalesOut)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2923,"title":2924,"titles":2925,"content":2926,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fstats#get-servicesstats","GET \u002Fservices\u002Fstats",[2894],"Resultados del período de todos los servicios F3-90. Tenant desde credencial, RLS. Owner\u002Fmanager o API key con bookings:read. Staff\u002Fviewer: 403. Fecha local de inicio\u002Fvencimiento; moneda del workspace. Dinero estimado con precio actual del catálogo y señas retenidas (F2-44\u002F45), no charges. Máximo 366 días. Excluye datos de prueba, held y expired. units_sold informa un único campo con x-fiuit-unit; null si hay varios campos o ninguna unidad. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionfromqueryYesstring (date)Primer día local del negocio (incluido)toqueryYesstring (date)Último día local del negocio (incluido) Responses StatusDescription200Successful Response (SalesOverviewOut)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":2928,"title":2929,"titles":2930,"content":2931,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fstats#get-teamoverview","GET \u002Fteam\u002Foverview",[2894],"Resumen del equipo (owner, manager, staff solo lo suyo; viewer 403) Una fila por recurso activo, con su persona si existe (solo los de tipo staff la tienen). Por defecto solo los de tipo staff (un negocio sin personas, con canchas o lugares, usa kind=all); kind=all devuelve todos los tipos activos y kind=\u003Ctipo> uno solo (Equipo y recursos). Staff solo ve sus recursos asignados. from\u002Fto son días locales del negocio, ambos incluidos (máximo 92 días, configurable; 422 invalid_stats_range si se pasa). occupancy = minutos reservados dentro del horario ÷ minutos disponibles (horario semanal con excepciones y bloqueos, en la zona horaria del negocio; los días de cambio de hora duran 23 o 25 h). Cuentan las reservas pending_payment, confirmed, checked_in y completed; no las canceladas, vencidas, ausencias, holds ni las de prueba. En recursos pooled son minutos-unidad (unidades × minutos ÷ capacidad × minutos disponibles). next_available_at: primer hueco libre de 15 min en los próximos 30 días (null si no hay horario); next_available_free_units dice cuántos lugares quedan ahí (un recurso pooled puede estar libre con tareas ya cargadas en esa hora). days: la ocupación de cada día del período. open_today: confirmadas o en curso que empiezan hoy. Sin facturación. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionfromqueryYesstring (date)toqueryYesstring (date)kindqueryNostring staff, space, equipment, table, vehicle, zone, all default staff Responses StatusDescription200OK (TeamOverview)defaultError (RFC 9457) (Problem)",{"id":2933,"title":2934,"titles":2935,"content":2936,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fstats#get-work-itemsoutcomes","GET \u002Fwork-items\u002Foutcomes",[2894],"Cierres y cancelaciones por flujo y motivo Cuenta entradas de historial en días locales del negocio (ambos incluidos), excluye pruebas. Agrupa claves estables por flujo y salida; etiquetas históricas, sin texto libre ni datos de clientes. Reintentar no duplica; reabrir y cerrar vuelve a contar. Owner\u002Fmanager con finance:analyze; API key bookings:read. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionstartqueryYesstring (date)endqueryYesstring (date)service_idqueryNostring (uuid)resource_idqueryNostring (uuid) Responses StatusDescription200Cierres agrupados, sin paginación de tareas (OutcomeReasonReport)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":2938,"title":2939,"titles":2940,"content":2941,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers","API · customers",[],"customers operations in the OpenAPI contract that accept an API key.",{"id":2943,"title":2944,"titles":2945,"content":2946,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#get-customer-asset-types","GET \u002Fcustomer-asset-types",[2939],"Tipos de bien del negocio FIU-609 (ADR 0059 §2 y §8). Owner\u002Fmanager o API key con customers:read. Primero «Direcciones» (address, system: true, sin id: sus bienes son las direcciones guardadas), después los tipos del negocio y al final los de fábrica sin activar (active: false, sin id). Authentication: API key or dashboard sessionScopes: customers:read Responses StatusDescription200Tipos de bien (CustomerAssetTypePage)defaultError (RFC 9457) (Problem)",{"id":2948,"title":2949,"titles":2950,"content":2951,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#post-customer-asset-types","POST \u002Fcustomer-asset-types",[2939],"Activar un tipo de fábrica o crear un tipo de bien FIU-609. Owner\u002Fmanager con CSRF o API key con config:write. {\"preset\": \"vehicle\"} activa Vehículos (patente, marca, modelo, año, km y color, ninguno obligatorio): idempotente, devuelve 200 con el mismo tipo si ya estaba activo y lo reactiva si estaba desactivado. Sin preset, un tipo propio con key, name, name_one y fields (hasta 12; 409 asset_type_exists si la key ya existe). Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: CustomerAssetTypeCreate Responses StatusDescription200El tipo de fábrica ya estaba activo (o se reactivó) (CustomerAssetType)201Tipo activado o creado (CustomerAssetType)defaultError (RFC 9457) (Problem)",{"id":2953,"title":2954,"titles":2955,"content":2956,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#get-customer-asset-typestype_id","GET \u002Fcustomer-asset-types\u002F{type_id}",[2939],"Ver un tipo de bien FIU-609. Owner\u002Fmanager o API key con customers:read. Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptiontype_idpathYesstring (uuid) Responses StatusDescription200El tipo (CustomerAssetType)defaultError (RFC 9457) (Problem)",{"id":2958,"title":2959,"titles":2960,"content":2961,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#patch-customer-asset-typestype_id","PATCH \u002Fcustomer-asset-types\u002F{type_id}",[2939],"Editar o desactivar un tipo de bien FIU-609. Owner\u002Fmanager con CSRF o API key con config:write. active: false desactiva el tipo: sus bienes quedan en solo lectura y nada se borra. Quitar un campo de fields no borra los valores guardados (vuelven si vuelve la misma key). identifier_key debe ser un campo del tipo. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptiontype_idpathYesstring (uuid) Request body (required) application\u002Fjson: CustomerAssetTypePatch Responses StatusDescription200Tipo actualizado (CustomerAssetType)defaultError (RFC 9457) (Problem)",{"id":2963,"title":2964,"titles":2965,"content":2966,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#delete-customer-asset-typestype_id","DELETE \u002Fcustomer-asset-types\u002F{type_id}",[2939],"Borrar un tipo de bien sin bienes FIU-609. Owner\u002Fmanager con CSRF o API key con config:write. 409 asset_type_in_use si tiene bienes (desactivarlo con active=false). Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptiontype_idpathYesstring (uuid) Responses StatusDescription204BorradodefaultError (RFC 9457) (Problem)",{"id":2968,"title":2969,"titles":2970,"content":2971,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#get-customers","GET \u002Fcustomers",[2939],"Listar y buscar clientes reales (owner\u002Fmanager; sesión staff con vista mínima) Excluye is_test; cursor por última actividad descendente y UUID. q busca por nombre, email, empresa, etiqueta y teléfono (también el segundo); sirve al selector de cliente con escritura progresiva. Scope de API key customers:read. Actividad mutable puede cambiar el orden entre páginas. Sesión staff (F1-29): recibe CustomerStaffItem (id, name, phone_masked, tags, no_show_count; sin email, notas, documento, dirección, empresa ni segundo teléfono), solo con q de mínimo 3 caracteres (sin q, con phone\u002Ftag\u002Fcursor o con término corto ⇒ 422), tope 10 resultados y next_cursor null (sin paginación), y rate limit propio de 30 búsquedas\u002Fmin por actor con headers RateLimit y 429 customer_search_rate_limited. Cada búsqueda de staff audita customer.search (solo el término, sin contenido de resultados). Alcance del repartidor (F2-52): solo encuentra clientes con tareas en sus recursos propios (vigentes o cerradas hace menos de 48 h). Viewer sigue en 403. Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptionphonequeryNostringqqueryNostringNombretagqueryNostringlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200OK (owner\u002Fmanager y API key: CustomerProfile; sesión staff: CustomerStaffItem con tope 10) (object)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":2973,"title":2974,"titles":2975,"content":2976,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#post-customers","POST \u002Fcustomers",[2939],"Alta manual de un cliente (owner\u002Fmanager\u002Fstaff; CSRF y auditoría) Exige al menos nombre, teléfono o email. El teléfono se normaliza a E.164; si ya existe un cliente con ese teléfono responde 409 customer_exists. Idempotency-Key opcional deduplica 24 h (sesión de panel y Bearer). Todos los datos ampliados son opcionales y personales (LGPD). Scope de API key customers:write. Escribe audit_log (customer.created, solo los nombres de los campos) y emite el evento customer.created. Respuesta (F1-29, cierre de hallazgo de seguridad): owner\u002Fmanager y API keys con customers:read reciben el CustomerProfile completo; la sesión staff y las API keys solo con customers:write reciben solo {\"id\"}, sin PII. En el 409, la extensión customer_id solo se expone a quien tiene lectura. Authentication: API key or dashboard sessionScopes: customers:write, customers:read Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderNostring Request body (required) application\u002Fjson: CustomerCreate Responses StatusDescription201Creado (CustomerProfile completo para lectores; {\"id\"} para staff o API key write-only) (CustomerProfile` \u002F `CustomerWriteAck)409Ya existe un cliente con ese teléfono (code=customer_exists); la extensión customer_id solo para quien tiene customers:read (``Problem \u002F object)defaultError (RFC 9457) (Problem)",{"id":2978,"title":2979,"titles":2980,"content":2981,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#get-customerscustomer_idaddresses","GET \u002Fcustomers\u002F{customer_id}\u002Faddresses",[2939],"Direcciones guardadas del cliente Owner\u002Fmanager o API key con customers:read. Tenant desde credencial; sin direcciones archivadas por rollback. Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid) Responses StatusDescription200Colección ordenada por predeterminada y fecha (object)defaultError (RFC 9457) (Problem)",{"id":2983,"title":2984,"titles":2985,"content":2986,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#post-customerscustomer_idaddresses","POST \u002Fcustomers\u002F{customer_id}\u002Faddresses",[2939],"Agregar una dirección del cliente Owner\u002Fmanager con CSRF o API key con customers:write y customers:read. Idempotency-Key admite reintentos. La primera es predeterminada; guardar una dirección no modifica tareas anteriores. Authentication: API key or dashboard sessionScopes: customers:write, customers:read Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid)Idempotency-KeyheaderNostringOpcional con cookie\u002FCSRF y obligatorio con API key; evita duplicados en reintentos Request body (required) application\u002Fjson: SavedCustomerAddressCreate Responses StatusDescription201Dirección creada (SavedCustomerAddress)defaultError (RFC 9457) (Problem)",{"id":2988,"title":2989,"titles":2990,"content":2991,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#patch-customerscustomer_idaddressesaddress_id","PATCH \u002Fcustomers\u002F{customer_id}\u002Faddresses\u002F{address_id}",[2939],"Editar dirección o elegir predeterminada Owner\u002Fmanager con CSRF o API key customers:write y customers:read. is_default admite solamente true; no altera el snapshot de tareas existentes. Authentication: API key or dashboard sessionScopes: customers:write, customers:read Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid)address_idpathYesstring (uuid) Request body (required) application\u002Fjson: SavedCustomerAddressPatch Responses StatusDescription200Dirección actualizada (SavedCustomerAddress)defaultError (RFC 9457) (Problem)",{"id":2993,"title":2994,"titles":2995,"content":2996,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#delete-customerscustomer_idaddressesaddress_id","DELETE \u002Fcustomers\u002F{customer_id}\u002Faddresses\u002F{address_id}",[2939],"Borrar dirección del cliente Owner\u002Fmanager con CSRF o API key customers:write. Si se borra la predeterminada se elige la siguiente; el snapshot de las tareas no cambia. Authentication: API key or dashboard sessionScopes: customers:write Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid)address_idpathYesstring (uuid) Responses StatusDescription204BorradadefaultError (RFC 9457) (Problem)",{"id":2998,"title":2999,"titles":3000,"content":3001,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#get-customerscustomer_idassets","GET \u002Fcustomers\u002F{customer_id}\u002Fassets",[2939],"Bienes del cliente FIU-609 (ADR 0059). Los vehículos (u otros bienes) de un cliente. Owner\u002Fmanager o API key con customers:read. El predeterminado primero; sin archivados salvo include_archived=true. Los bienes de un tipo desactivado vienen con read_only: true. Dato personal: la lectura se audita. Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid)typequeryNostringkey del tipo (vehicle)include_archivedqueryNoboolean default false Responses StatusDescription200Bienes del cliente (CustomerAssetPage)defaultError (RFC 9457) (Problem)",{"id":3003,"title":3004,"titles":3005,"content":3006,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#post-customerscustomer_idassets","POST \u002Fcustomers\u002F{customer_id}\u002Fassets",[2939],"Agregar un bien del cliente FIU-609. Owner\u002Fmanager con CSRF o API key con customers:write y customers:read. type es la key del tipo: un tipo de fábrica sin activar (vehicle) se activa al vuelo. Para un auto alcanza con la patente o el modelo (422 asset_invalid si no viene ninguno). El primero es el predeterminado. 409 asset_duplicate (con asset_id) si el cliente ya tiene esa patente viva; 409 asset_type_archived si el tipo está desactivado. Una patente con formato desconocido para el país se acepta con warnings: [\"plate_format\"]. Authentication: API key or dashboard sessionScopes: customers:write, customers:read Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid)Idempotency-KeyheaderNostringOpcional con cookie\u002FCSRF y obligatorio con API key; evita duplicados en reintentos Request body (required) application\u002Fjson: CustomerAssetCreate Responses StatusDescription201Bien creado (CustomerAsset)defaultError (RFC 9457) (Problem)",{"id":3008,"title":3009,"titles":3010,"content":3011,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#get-customerscustomer_idassetsasset_id","GET \u002Fcustomers\u002F{customer_id}\u002Fassets\u002F{asset_id}",[2939],"Ver un bien del cliente FIU-609. Owner\u002Fmanager o API key con customers:read. 404 asset_not_found si no es de ese cliente. Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid)asset_idpathYesstring (uuid) Responses StatusDescription200El bien (CustomerAsset)defaultError (RFC 9457) (Problem)",{"id":3013,"title":3014,"titles":3015,"content":3016,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#patch-customerscustomer_idassetsasset_id","PATCH \u002Fcustomers\u002F{customer_id}\u002Fassets\u002F{asset_id}",[2939],"Editar un bien, elegirlo como predeterminado o archivarlo FIU-609. Owner\u002Fmanager con CSRF o API key customers:write y customers:read. data se mezcla con lo guardado (una clave con null borra ese valor). is_default admite solo true; archived: true lo saca de la lista y elige otro predeterminado. Para pasar un auto a otro cliente: crearlo en el otro y archivarlo acá. 409 asset_type_archived si el tipo está desactivado (solo lectura). Authentication: API key or dashboard sessionScopes: customers:write, customers:read Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid)asset_idpathYesstring (uuid) Request body (required) application\u002Fjson: CustomerAssetPatch Responses StatusDescription200Bien actualizado (CustomerAsset)defaultError (RFC 9457) (Problem)",{"id":3018,"title":3019,"titles":3020,"content":3021,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#delete-customerscustomer_idassetsasset_id","DELETE \u002Fcustomers\u002F{customer_id}\u002Fassets\u002F{asset_id}",[2939],"Borrar un bien del cliente FIU-609. Owner\u002Fmanager con CSRF o API key customers:write y customers:read. Borrado definitivo (dato personal); sus fotos se borran del almacenamiento. Si era el predeterminado se elige el siguiente. Para dejar de usarlo sin borrarlo, archivarlo. Authentication: API key or dashboard sessionScopes: customers:write, customers:read Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid)asset_idpathYesstring (uuid) Responses StatusDescription204BorradodefaultError (RFC 9457) (Problem)",{"id":3023,"title":3024,"titles":3025,"content":3026,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#post-customerscustomer_idconversations","POST \u002Fcustomers\u002F{customer_id}\u002Fconversations",[2939],"Abrir la conversación del cliente por un canal (mensaje en frío) Devuelve la conversación activa del cliente por ese canal (200, created: false) o crea una vacía en la conexión conectada (201, created: true); no envía nada, el mensaje se redacta con POST \u002Fconversations\u002F{id}\u002Fmessages. Permiso conversations:operate (owner, manager, staff con clientes de sus tareas; API key con messages:write; sesión con CSRF); tenant desde la credencial; 404 si el cliente no existe o el staff no lo ve. Idempotente por naturaleza (una conversación por conexión y cliente). Auditado conversation.opened_cold. 409 channel_unavailable con reason cerrado: no_channel_connection (sin conexión conectada o canal pausado), no_contact (WhatsApp sin teléfono válido; Telegram sin tg_user), channel_not_supported (webchat e Instagram no admiten iniciar: en Instagram solo el cliente abre la ventana de 24 h), channel_not_implemented (reservado), outside_window (ventana vencida) y test_customer. Cloud respeta ventana de 24 h\u002Fplantilla al enviar; WAHooks permite primer contacto sin ventana oficial, con aviso y límite por proyecto\u002Fdía UTC (20 por defecto, COLD_OPEN_DAILY_LIMIT; 429 cold_open_rate_limited). Reintentos no consumen cupo. Authentication: API key or dashboard sessionScopes: messages:write Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid) Request body (required) application\u002Fjson: object Responses StatusDescription200Ya existía una conversación activa por ese canal (CustomerConversationOpened)201Conversación vacía creada (CustomerConversationOpened)409Canal sin destinatario enrutable, no implementado o fuera de ventana (ColdOpenProblem)429Límite diario de aperturas WAHooks del proyecto alcanzado (ColdOpenRateLimitProblem)defaultError (RFC 9457) (Problem)",{"id":3028,"title":3029,"titles":3030,"content":3031,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#get-customerscustomer_idtask-addresses","GET \u002Fcustomers\u002F{customer_id}\u002Ftask-addresses",[2939],"Direcciones mínimas para capturar un destino operativo Owner\u002Fmanager o API key customers:read. Staff solo clientes visibles por tareas asignadas y ventana operativa vigente (404 fuera de alcance). No expone perfil ni timestamps. Seleccionar no concede consentimiento para guardar. Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid) Responses StatusDescription200Destinos operativos mínimos (object)defaultError (RFC 9457) (Problem)",{"id":3033,"title":3034,"titles":3035,"content":3036,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#get-customersid","GET \u002Fcustomers\u002F{id}",[2939],"Ficha del cliente (owner\u002Fmanager completa y auditada; sesión staff mínima) Owner\u002Fmanager y API key con customers:read reciben CustomerDetail completo (audita customer.viewed). La sesión de staff (F1-29) recibe solo id, name, phone_masked, tags y no_show_count (sin email, notas, documento, dirección, empresa, segundo teléfono, reservas ni conversaciones) y audita customer.read. Viewer sigue en 403. Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (owner\u002Fmanager y API key: CustomerDetail; sesión staff: vista mínima como CustomerStaffItem) (CustomerDetail)defaultError (RFC 9457) (Problem)",{"id":3038,"title":3039,"titles":3040,"content":3041,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#patch-customersid","PATCH \u002Fcustomers\u002F{id}",[2939],"Editar datos del cliente (owner\u002Fmanager\u002Fstaff; CSRF y auditoría) phone cambia el teléfono principal (identificador único del workspace): se normaliza a E.164 con la región del workspace y, si ya es de otro cliente (en cualquier formato, incluido el 9 móvil de BR\u002FAR), responde 409 customer_exists con customer_id solo para quien tiene lectura; phone: null es 422. address solo se escribe por owner\u002Fmanager o API key con customers:write y sincroniza la predeterminada; reemplaza la dirección completa; null o vacío la borra. Scope de API key customers:write. Respuesta como POST (F1-29): CustomerProfile completo solo para quien tiene lectura (customers:read); staff y API key write-only reciben solo {\"id\"}. Authentication: API key or dashboard sessionScopes: customers:write, customers:read Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: object Responses StatusDescription200Actualizado (CustomerProfile completo para lectores; {\"id\"} para staff o API key write-only) (CustomerProfile` \u002F `CustomerWriteAck)409El teléfono nuevo ya es de otro cliente (code=customer_exists); la extensión customer_id solo para quien tiene customers:read (``Problem \u002F object)defaultError (RFC 9457) (Problem)",{"id":3043,"title":3044,"titles":3045,"content":3046,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#get-customersidbookings","GET \u002Fcustomers\u002F{id}\u002Fbookings",[2939],"Historial mínimo de reservas (owner\u002Fmanager todo; staff solo las suyas finalizadas; lectura auditada) Permisos finished_tasks:read_all (owner, manager, API key con customers:read) y finished_tasks:read_own (staff), ver docs\u002Fsecurity\u002Fmatriz-de-permisos.md. Con read_own la lista trae solo tareas terminadas (completed, cancelled, no_show, failed) asignadas a los recursos del staff, y solo de clientes con los que trabaja; cualquier otro cliente responde 404 igual que uno inexistente. viewer responde 403. Cada lectura queda en el audit log con su alcance. Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptionidpathYesstringlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200Reservas sin notas, intake_data ni mensajes (object)defaultError (RFC 9457) (Problem)",{"id":3048,"title":3049,"titles":3050,"content":3051,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcustomers#get-customersidsummary","GET \u002Fcustomers\u002F{id}\u002Fsummary",[2939],"Resumen del cliente, calculado en vivo (owner\u002Fmanager) Una consulta agrupada por (workspace, cliente, estado); sin tablas de estadísticas ni caché. total excluye held\u002Fexpired. upcoming = confirmed\u002Fchecked_in cuyo fin es posterior a ahora (futuras o en curso; las de modo cola no cuentan). last_visit_at = última completada. next_booking = la próxima de esas (id, inicio, servicio) o null. Un cliente real nunca cuenta reservas de prueba; un cliente de prueba devuelve su propio resumen con is_test=true. Solo owner\u002Fmanager (PII, como \u002Fcustomers); staff\u002Fviewer 403; cross-tenant 404. Scope de API key customers:read (solo GET). Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200Resumen (object)defaultError (RFC 9457) (Problem)",{"id":3053,"title":3054,"titles":3055,"content":3056,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fsearch","API · search",[],"search operations in the OpenAPI contract that accept an API key.",{"id":3058,"title":3059,"titles":3060,"content":3061,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsearch#get-search","GET \u002Fsearch",[3054],"Búsqueda global agrupada por tipo (solo sesión de panel) Busca q en clientes (nombre, teléfono, email), conversaciones (cliente o último mensaje), tareas (cliente, servicio o código: el prefijo hexadecimal del id, con o sin #) y recursos y servicios (nombre). Devuelve un grupo por tipo con tope limit (por defecto 5, máximo 10); un término de menos de 2 caracteres (3 para el repartidor) devuelve todos los grupos vacíos. Sin dinero en ningún tipo. Respeta la visibilidad de cada pantalla: clientes, recursos y servicios solo para owner\u002Fmanager (el viewer y el repartidor no tienen esas pantallas: sus grupos vienen vacíos); conversaciones para owner, manager, viewer y repartidor; tareas para todos. El repartidor (staff) solo ve las conversaciones de sus clientes (contacto enmascarado) y las tareas asignadas a sus recursos, con el mismo rate limit de 30 búsquedas\u002Fmin que la búsqueda de clientes del repartidor (429 customer_search_rate_limited). Cada tipo corre con un statement_timeout corto; si alguno se pasa del tiempo se omite y partial es true. Solo cookie de sesión: no tiene scope de API key (un bearer recibe 403). El término es PII: no se loguea ni se audita crudo. Índices pg_trgm (migración f7a0b1c2d3e4). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionqqueryYesstringNombrelimitqueryNointeger default 5Tope por tipo Responses StatusDescription200OK (SearchResults)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3063,"title":3064,"titles":3065,"content":3066,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows","API · flows",[],"flows operations in the OpenAPI contract that accept an API key. Flujos (ADR 0040): el recorrido de etapas que eligen los servicios. Lectura: owner y manager; escritura: owner (API key con settings:write).",{"id":3068,"title":3069,"titles":3070,"content":3071,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#get-base-states","GET \u002Fbase-states",[3064],"Estados base del motor flows:read: owner\u002Fmanager por sesión, o API key config:read. Catálogo de estados base del motor. Authentication: API key or dashboard sessionScopes: flows:read, config:read Responses StatusDescription200Successful Response (object)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3073,"title":3074,"titles":3075,"content":3076,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#get-flow-examples","GET \u002Fflow-examples",[3064],"Ejemplos de flujo para copiar flows:read: owner\u002Fmanager por sesión, o API key config:read. El flujo de sistema y los de cada blueprint, con la forma del cuerpo de POST \u002Fflows (key más format, stages y exits). Reemplaza a \u002Fstage-templates. Authentication: API key or dashboard sessionScopes: flows:read, config:read Responses StatusDescription200Successful Response (object)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3078,"title":3079,"titles":3080,"content":3081,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#get-flow-message-catalog","GET \u002Fflow-message-catalog",[3064],"Variables y textos por defecto del mensaje al cliente de una etapa flows:read: owner\u002Fmanager por sesión, o API key config:read. Ayuda para editar el mensaje al cliente de una etapa (on_enter.notify_customer.texts, F3-534): las variables protegidas con datos de ejemplo ya formateados (zona horaria, moneda e idioma) y el texto por defecto de cada plantilla en pt, es y en. Las variables son las únicas que el servidor acepta al publicar el flujo (PATCH \u002Fflows\u002F{id}, flows:write): otra variable, llaves sueltas o formatos devuelven 422 message_variable_unknown | message_braces_invalid | message_text_empty | message_text_too_long | message_variable_not_available (cola, sin horario), con la etapa y el campo. Fecha\u002Fhora, monto y link de seguimiento los arma el core; el texto guardado es el que sale (nunca generado). Sin texto en el idioma del cliente, o con una variable sin valor, sale la plantilla. Authentication: API key or dashboard sessionScopes: flows:read, config:read, flows:write Responses StatusDescription200Successful Response (FlowMessageCatalog)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3083,"title":3084,"titles":3085,"content":3086,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#get-flows","GET \u002Fflows",[3064],"Listar flujos flows:read: owner\u002Fmanager por sesión, o API key config:read. Los de sistema primero; include_inactive=true agrega los desactivados. Sin purpose no incluye la raíz «Atención del bot» (no es un recorrido, F3-467): purpose=entry la trae (una por proyecto, sin etapas, con greeting y order en GET \u002Fflows\u002F{id}). Authentication: API key or dashboard sessionScopes: flows:read, config:read Parameters NameInRequiredTypeDescriptionpurposequeryNostring catalog, intent, entryinclude_inactivequeryNoboolean default false Responses StatusDescription200Successful Response (FlowDefinitionList)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3088,"title":3089,"titles":3090,"content":3091,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#post-flows","POST \u002Fflows",[3064],"Crear un flujo flows:write: owner por sesión con CSRF, o API key settings:write (mismos roles que tenía service_stages:write). Flujo propio con su versión 1 (note opcional). purpose=entry: 422 entry_flow_unique (la raíz «Atención del bot» es una por proyecto y la crea el proyecto, F3-467; también al copiarla). purpose=intent exige mode=queue (422 flow_mode_mismatch): sus tareas no tienen servicio ni horario (F3-457). Flujo v2 con ítems y botones. confirm_moves=true es obligatorio si hay tareas que mover: 409 stage_moves_unconfirmed. Identidad estable contra todo el historial: 422 stage_key_reinterpreted; v1 no se restaura: 422 version_format_unsupported. 422 bot_offer_unknown_item si bot_offers nombra un ítem inexistente o de otro tipo. Campos v3\u002Fv4: 422 field_reserved, item_type_not_available (payment, products y offer con kind plan; offer y timer sin su configuración: invalid_offer, invalid_timer), effect_not_available, variable_not_available (, , ), con ruta del campo. 422 flow_mode_mismatch si un servicio del flujo es de otro modo, item_key_reserved si un ítem repite un campo del formulario de un servicio. Un flujo de sistema (system_key) no se publica: 422 flow_system_readonly al editarlo; se edita su copia propia (POST \u002Fflows\u002F{id}\u002Fcustomize, F3-731) o se crea uno propio con POST \u002Fflows y se asigna con flow_id en POST|PATCH \u002Fservices. Publicar mueve tareas y escribe auditoría (flow.updated) en su transacción (outbox, F3-184). Authentication: API key or dashboard sessionScopes: flows:write, settings:write Request body (required) application\u002Fjson: FlowInput Responses StatusDescription201Successful Response (FlowDefinition)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3093,"title":3094,"titles":3095,"content":3096,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#get-flowsid","GET \u002Fflows\u002F{id}",[3064],"Leer un flujo con su versión vigente flows:read: owner\u002Fmanager por sesión, o API key config:read. Incluye los servicios que lo usan. Un flujo lo comparten varios servicios (ADR 0040): publicar una versión mueve las tareas abiertas de todos (impact.by_service) y impact.shared_with lista los servicios que cambian; el cliente (panel, MCP) pide confirmar. Authentication: API key or dashboard sessionScopes: flows:read, config:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Successful Response (FlowDefinition)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3098,"title":3099,"titles":3100,"content":3101,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#patch-flowsid","PATCH \u002Fflows\u002F{id}",[3064],"Renombrar, activar o publicar un flujo task_view (FIU-584) cambia «Cómo se ve la tarea» sin versión nueva ni mover tareas, también en un flujo de sistema. flows:write: owner por sesión con CSRF, o API key settings:write (mismos roles que tenía service_stages:write). Un flujo lo comparten varios servicios (ADR 0040): publicar una versión mueve las tareas abiertas de todos (impact.by_service) y impact.shared_with lista los servicios que cambian; el cliente (panel, MCP) pide confirmar. Con format, exits y stages publica una versión nueva (base_version evita pisar; 409 stale_version). Desactivar no cancela tareas ni cambia las de los servicios que ya lo usan: solo impide asignarlo. Flujo v2 con ítems y botones. confirm_moves=true es obligatorio si hay tareas que mover: 409 stage_moves_unconfirmed. Si hay varios servicios, shared_with_ack incluye todos los IDs revisados de impact.shared_with (incluido el editado); si falta alguno, 409 stage_shared_unconfirmed con impact actualizado exige validar y confirmar otra vez. Identidad estable contra todo el historial: 422 stage_key_reinterpreted; v1 no se restaura: 422 version_format_unsupported. 422 bot_offer_unknown_item si bot_offers nombra un ítem inexistente o de otro tipo. Campos v3\u002Fv4: 422 field_reserved, item_type_not_available (payment, products y offer con kind plan; offer y timer sin su configuración: invalid_offer, invalid_timer), effect_not_available, variable_not_available (, , ), con ruta del campo. 422 flow_mode_mismatch si un servicio del flujo es de otro modo, item_key_reserved si un ítem repite un campo del formulario de un servicio. Un flujo de sistema (system_key) no se publica: 422 flow_system_readonly al editarlo; se edita su copia propia (POST \u002Fflows\u002F{id}\u002Fcustomize, F3-731) o se crea uno propio con POST \u002Fflows y se asigna con flow_id en POST|PATCH \u002Fservices. Publicar mueve tareas y escribe auditoría (flow.updated) en su transacción (outbox, F3-184). Raíz «Atención del bot» (purpose=entry, ADR 0040 §4.4, F3-467): solo cambian greeting y order (versión nueva y auditoría flow.entry_root_changed); 422 entry_branch_unknown (con key) si una clave de order no es services, products, subscriptions, faq, mine, handoff ni flow: de un flujo por intención activo con entry y la etapa en la que nace su tarea (pausado o no: una rama propia pausada conserva su lugar, F3-467b); 422 entry_branch_duplicate si se repite; 422 invalid_entry_greeting si el saludo no es pt\u002Fes\u002Fen de hasta 300; active=false → 422 entry_flow_required (no se desactiva ni se borra); name, entry, etapas o restaurar una versión → 422 entry_flow_readonly. greeting u order en otro flujo → 422 root_fields_only_for_entry. La raíz se edita con bot:configure (owner, manager o colaborador) por sesión con CSRF o con una API key config:write (el mismo permiso que «Qué vende el bot», F3-467b); settings:write no alcanza para la raíz. Authentication: API key or dashboard sessionScopes: flows:write, settings:write, config:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Request body (required) application\u002Fjson: FlowPatchInput Responses StatusDescription200Successful Response (FlowDefinition)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3103,"title":3104,"titles":3105,"content":3106,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#delete-flowsid","DELETE \u002Fflows\u002F{id}",[3064],"Borrar un flujo sin uso flows:write: owner por sesión con CSRF, o API key settings:write. F3-731: borra un flujo propio que ningún servicio usa y que nunca tuvo tareas (has_tasks falso), con sus versiones. 409 flow_in_use si un servicio lo usa (elegile otro antes); 409 flow_has_tasks si tiene tareas, abiertas o cerradas (desactivalo en su lugar); 422 flow_system_readonly para un flujo de sistema; 422 entry_flow_required para «Atención del bot». 404 si no existe en el proyecto. Escribe auditoría (flow.deleted). Authentication: API key or dashboard sessionScopes: flows:write, settings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription204Successful Response401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3108,"title":3109,"titles":3110,"content":3111,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#post-flowsidcopy","POST \u002Fflows\u002F{id}\u002Fcopy",[3064],"Copiar un flujo flows:write: owner por sesión con CSRF, o API key settings:write. Crea un flujo propio e independiente con la versión vigente del origen como su versión 1 (note opcional): ningún servicio pasa a usarlo y cambiar uno no cambia el otro. El origen puede ser de sistema, propio o desactivado; la copia conserva modo y propósito, queda activa y sin system_key. Se asigna a un servicio con flow_id en POST|PATCH \u002Fservices. 404 si el flujo no existe en el proyecto; 422 con un nombre inválido. Escribe auditoría (flow.copied). Authentication: API key or dashboard sessionScopes: flows:write, settings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Request body (required) application\u002Fjson: FlowCopyInput Responses StatusDescription201Successful Response (FlowDefinition)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3113,"title":3114,"titles":3115,"content":3116,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#post-flowsidcustomize","POST \u002Fflows\u002F{id}\u002Fcustomize",[3064],"Editar un flujo de sistema en la copia propia del negocio flows:write: owner por sesión con CSRF, o API key settings:write. F3-731: el negocio edita su copia de un flujo de sistema (turno_simple, pedido_simple, alta_simple, cuota_simple). La primera vez la crea con la versión vigente de la base (copy_of dice de cuál, mismo nombre que se ve) y le pasa todos los servicios que usaban la base; los servicios nuevos de ese modo nacen en la copia. Las tareas abiertas siguen en el suyo. Si ya existe, la devuelve sin cambios (idempotente). Después se publica con PATCH \u002Fflows\u002F{copia}. 422 flow_not_system si el flujo no es de sistema; 404 si no existe en el proyecto. Escribe auditoría (flow.customized). Authentication: API key or dashboard sessionScopes: flows:write, settings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Successful Response (FlowDefinition)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3118,"title":3119,"titles":3120,"content":3121,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#post-flowsidrestore","POST \u002Fflows\u002F{id}\u002Frestore",[3064],"Volver al flujo de sistema original flows:write: owner por sesión con CSRF, o API key settings:write. F3-731: «Volver al original» desde la copia propia (copy_of): sus servicios vuelven al flujo de sistema y los nuevos nacen ahí. Las tareas abiertas no se mueven: terminan con la versión del flujo que tenían. La copia nunca se borra (decisión B): queda como flujo propio «… (anterior)», sin copy_of ni servicios («Sin uso»), y se borra a mano con DELETE \u002Fflows\u002F{id} si no tiene tareas. Devuelve el flujo de sistema. 422 flow_not_copy si el flujo no es una copia propia; 404 si no existe en el proyecto. Escribe auditoría (flow.restored). Authentication: API key or dashboard sessionScopes: flows:write, settings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Responses StatusDescription200Successful Response (FlowDefinition)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3123,"title":3124,"titles":3125,"content":3126,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#post-flowsidsimulate","POST \u002Fflows\u002F{id}\u002Fsimulate",[3064],"Probar dónde cae cada frase de entrada sin escribir flows:write: owner por sesión con CSRF, o API key settings:write. Simulacro de entrada (ADR 0040 §6, F3-460) de un flujo por intención: corre los examples y not_when de entry (el del cuerpo, sin guardarlo, o el guardado) y todos los ejemplos de cada otro flujo por intención que el bot ofrece por el mismo elegidor del bot de clientes: palabras clave sin IA y, si no deciden, una elección barata con lista cerrada por frase, con la IA del proyecto (cuenta en su uso de IA). results dice dónde cae cada frase (landed: flow, service, action, reply o ask con options) y ok=false si choca: un ejemplo que no cae en este flujo (fix add_example_or_keyword) o una frase que no es de este flujo y cae en él o en una pregunta que lo incluye (fix add_not_when). catalog_clash: una palabra clave choca con el catálogo (al guardar, 422 flow_entry_keyword_catalog). No simula el catálogo por reglas (un mensaje que nombra un servicio lo toma su plantilla antes). 422 entry_only_for_intent si el flujo no es por intención; 422 flow_entry_missing sin entry dada ni guardada. No guarda nada ni crea tareas. Authentication: API key or dashboard sessionScopes: flows:write, settings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Request body (required) application\u002Fjson: FlowSimulateInput Responses StatusDescription200Successful Response (FlowSimulation)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3128,"title":3129,"titles":3130,"content":3131,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#get-flowsidusage","GET \u002Fflows\u002F{id}\u002Fusage",[3064],"Uso de un flujo por día y dónde se traban sus tareas days: tareas que entraron (día local de su alta) y que se completaron, por día. stages: tareas abiertas por etapa y su espera desde que entraron a ella; bottleneck, la de más espera promedio. El colaborador ve solo lo suyo (scope: own, F3-729). Tenant desde la credencial, RLS. Panel: permiso flows:usage (owner, manager y colaborador); el colaborador lo tiene solo sobre lo suyo (scope: own: tareas asignadas a los recursos enlazados a su usuario; sin recurso propio, cero), nunca los totales del negocio (scope: business). API key: scope bookings:read. Entran las tareas por el día local de su alta, sin las de prueba ni los holds que no se concretaron (held, expired). Solo lectura: no guarda nada nuevo. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)daysqueryNointeger default 84Días hasta hoy inclusive (84 = 12 semanas) Responses StatusDescription200Successful Response (FlowUsageOut)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":3133,"title":3134,"titles":3135,"content":3136,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#post-flowsidvalidate","POST \u002Fflows\u002F{id}\u002Fvalidate",[3064],"Validar un flujo sin escribir flows:write: owner por sesión con CSRF, o API key settings:write (mismos roles que tenía service_stages:write). Un flujo lo comparten varios servicios (ADR 0040): publicar una versión mueve las tareas abiertas de todos (impact.by_service) y impact.shared_with lista los servicios que cambian; el cliente (panel, MCP) pide confirmar. Devuelve impact: tareas que se moverían (count, moves, by_service) y shared_with. En un flujo de sistema valida solo el formato. Flujo v2 con ítems y botones. confirm_moves=true es obligatorio si hay tareas que mover: 409 stage_moves_unconfirmed. Identidad estable contra todo el historial: 422 stage_key_reinterpreted; v1 no se restaura: 422 version_format_unsupported. 422 bot_offer_unknown_item si bot_offers nombra un ítem inexistente o de otro tipo. Campos v3\u002Fv4: 422 field_reserved, item_type_not_available (payment, products y offer con kind plan; offer sin su configuración: invalid_offer), effect_not_available, variable_not_available (, , ), con ruta del campo. 422 flow_mode_mismatch si un servicio del flujo es de otro modo, item_key_reserved si un ítem repite un campo del formulario de un servicio. Un flujo de sistema (system_key) es de solo lectura: 422 flow_system_readonly al editarlo; se crea uno propio con POST \u002Fflows y se asigna con flow_id en POST|PATCH \u002Fservices. Publicar mueve tareas y escribe auditoría (flow.updated) en su transacción (outbox, F3-184). Authentication: API key or dashboard sessionScopes: flows:write, settings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid) Request body (required) application\u002Fjson: FlowValidateInput Responses StatusDescription200Successful Response (FlowValidation)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3138,"title":3139,"titles":3140,"content":3141,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#get-flowsidversions","GET \u002Fflows\u002F{id}\u002Fversions",[3064],"Historial de versiones del flujo flows:read: owner\u002Fmanager por sesión, o API key config:read. Paginado hacia atrás con before; next_before es el cursor. Authentication: API key or dashboard sessionScopes: flows:read, config:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)limitqueryNointeger default 25beforequeryNointeger Responses StatusDescription200Successful Response (FlowVersionPage)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3143,"title":3144,"titles":3145,"content":3146,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#get-flowsidversionsversion","GET \u002Fflows\u002F{id}\u002Fversions\u002F{version}",[3064],"Leer una versión del flujo flows:read: owner\u002Fmanager por sesión, o API key config:read. Versión inmutable del flujo. Authentication: API key or dashboard sessionScopes: flows:read, config:read Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)versionpathYesinteger Responses StatusDescription200Successful Response (FlowVersion)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3148,"title":3149,"titles":3150,"content":3151,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#post-flowsidversionsversionrevert","POST \u002Fflows\u002F{id}\u002Fversions\u002F{version}\u002Frevert",[3064],"Restaurar una versión del flujo creando otra flows:write: owner por sesión con CSRF, o API key settings:write (mismos roles que tenía service_stages:write). Un flujo lo comparten varios servicios (ADR 0040): publicar una versión mueve las tareas abiertas de todos (impact.by_service) y impact.shared_with lista los servicios que cambian; el cliente (panel, MCP) pide confirmar. Crea una versión nueva con el contenido de la elegida (reverted_from); mismas confirmaciones que publicar. Flujo v2 con ítems y botones. confirm_moves=true es obligatorio si hay tareas que mover: 409 stage_moves_unconfirmed. Si hay varios servicios, shared_with_ack incluye todos los IDs revisados de impact.shared_with (incluido el editado); si falta alguno, 409 stage_shared_unconfirmed con impact actualizado exige validar y confirmar otra vez. Identidad estable contra todo el historial: 422 stage_key_reinterpreted; v1 no se restaura: 422 version_format_unsupported. 422 bot_offer_unknown_item si bot_offers nombra un ítem inexistente o de otro tipo. Campos v3\u002Fv4: 422 field_reserved, item_type_not_available (payment, products y offer con kind plan; offer y timer sin su configuración: invalid_offer, invalid_timer), effect_not_available, variable_not_available (, , ), con ruta del campo. 422 flow_mode_mismatch si un servicio del flujo es de otro modo, item_key_reserved si un ítem repite un campo del formulario de un servicio. Un flujo de sistema (system_key) no se publica: 422 flow_system_readonly al editarlo; se edita su copia propia (POST \u002Fflows\u002F{id}\u002Fcustomize, F3-731) o se crea uno propio con POST \u002Fflows y se asigna con flow_id en POST|PATCH \u002Fservices. Publicar mueve tareas y escribe auditoría (flow.updated) en su transacción (outbox, F3-184). Authentication: API key or dashboard sessionScopes: flows:write, settings:write Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)versionpathYesinteger Request body (optional) application\u002Fjson: FlowRevertInput Responses StatusDescription200Successful Response (FlowVersion)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3153,"title":3154,"titles":3155,"content":3156,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fflows#get-flowsusage","GET \u002Fflows\u002Fusage",[3064],"Uso de los flujos en los últimos 7 días Por flujo: tareas que entraron cada uno de los últimos 7 días (hoy al final), su total y el de los 7 anteriores, y si se usó alguna vez (used). Día local del proyecto; sin tareas de prueba (F3-729). Tenant desde la credencial, RLS. Panel: permiso flows:usage (owner, manager y colaborador); el colaborador lo tiene solo sobre lo suyo (scope: own: tareas asignadas a los recursos enlazados a su usuario; sin recurso propio, cero), nunca los totales del negocio (scope: business). API key: scope bookings:read. Entran las tareas por el día local de su alta, sin las de prueba ni los holds que no se concretaron (held, expired). Solo lectura: no guarda nada nuevo. Authentication: API key or dashboard sessionScopes: bookings:read Responses StatusDescription200Successful Response (FlowUsageList)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":3158,"title":3159,"titles":3160,"content":3161,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fcomments","API · comments",[],"comments operations in the OpenAPI contract that accept an API key.",{"id":3163,"title":3164,"titles":3165,"content":3166,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcomments#get-bookingsidcomments","GET \u002Fbookings\u002F{id}\u002Fcomments",[3159],"Comentarios internos de una reserva (más nuevo primero) Owner, manager y viewer ven todas; staff solo reservas con un recurso suyo (si no, 404). Scope de API key bookings:read (solo lectura). Un comentario es una nota del equipo y nunca se envía al cliente por ningún canal. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstringlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200OK (CommentPage)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3168,"title":3169,"titles":3170,"content":3171,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcomments#post-bookingsidcomments","POST \u002Fbookings\u002F{id}\u002Fcomments",[3159],"Comentar de una reserva Solo sesión de panel con CSRF (las API keys no escriben). Límite de tasa por usuario (429 comment_rate_limited) y máximo de comentarios por entidad (422 comment_limit_reached). Auditado. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: CommentCreate Responses StatusDescription201Creado (Comment)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3173,"title":3174,"titles":3175,"content":3176,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcomments#get-bookingsidtimeline","GET \u002Fbookings\u002F{id}\u002Ftimeline",[3159],"Línea de tiempo de una reserva (más nuevo primero) Comentarios, auditoría minimizada de estado\u002Fetapa\u002Fhorario, ubicación puntual vigente y metadatos de adjuntos privados; nunca contenido del archivo ni storage keys. Cursor por (fecha, id). Owner, manager y viewer ven todas; staff solo reservas con un recurso suyo (si no, 404). Scope de API key bookings:read. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstringlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200OK (TimelinePage)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3178,"title":3179,"titles":3180,"content":3181,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcomments#patch-commentsid","PATCH \u002Fcomments\u002F{id}",[3159],"Editar un comentario (autor, owner o manager) El texto original queda en el diff de auditoría. Solo sesión de panel con CSRF. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: CommentCreate Responses StatusDescription200Actualizado (Comment)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3183,"title":3184,"titles":3185,"content":3186,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcomments#delete-commentsid","DELETE \u002Fcomments\u002F{id}",[3159],"Borrar un comentario (borrado lógico; autor, owner o manager) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription204Borrado403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3188,"title":3189,"titles":3190,"content":3191,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcomments#get-customersidcomments","GET \u002Fcustomers\u002F{id}\u002Fcomments",[3159],"Comentarios internos de un cliente (más nuevo primero) Solo owner\u002Fmanager (PII, como \u002Fcustomers); staff\u002Fviewer reciben 403. Scope de API key customers:read (solo lectura). Un comentario es una nota del equipo y nunca se envía al cliente por ningún canal. Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptionidpathYesstringlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200OK (CommentPage)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3193,"title":3194,"titles":3195,"content":3196,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcomments#post-customersidcomments","POST \u002Fcustomers\u002F{id}\u002Fcomments",[3159],"Comentar de un cliente Solo sesión de panel con CSRF (las API keys no escriben). Límite de tasa por usuario (429 comment_rate_limited) y máximo de comentarios por entidad (422 comment_limit_reached). Auditado. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: CommentCreate Responses StatusDescription201Creado (Comment)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3198,"title":3199,"titles":3200,"content":3201,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fcomments#get-customersidtimeline","GET \u002Fcustomers\u002F{id}\u002Ftimeline",[3159],"Línea de tiempo de un cliente (más nuevo primero) Comentarios + auditoría relevante (cambios de ficha y de sus reservas). Cursor por (fecha, id). Cuando exista booking_stage_event (F1-19) se suma como fuente. Solo owner\u002Fmanager (PII, como \u002Fcustomers); staff\u002Fviewer reciben 403. Scope de API key customers:read. Authentication: API key or dashboard sessionScopes: customers:read Parameters NameInRequiredTypeDescriptionidpathYesstringlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200OK (TimelinePage)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3203,"title":3204,"titles":3205,"content":3206,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations","API · conversations",[],"conversations operations in the OpenAPI contract that accept an API key.",{"id":3208,"title":3209,"titles":3210,"content":3211,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#get-conversations","GET \u002Fconversations",[3204],"Listar conversaciones del inbox (más recientes primero) Array sin envoltorio; se pagina con limit + offset (F2-03). El panel lo adapta a Page (F3-16). Rol staff (F2-52): solo las conversaciones de clientes con tareas vigentes (o cerradas hace menos de 48 h) en un recurso propio; sin tareas, lista vacía. Los filtros se combinan entre sí (AND) y siempre dentro de ese alcance. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionmodequeryNobot, human, pausedlifecyclequeryNoarray\u003CConversationLifecycle>Filtro por estado del ciclo de vida (F2-35). Multi-valor (?lifecycle=pending&lifecycle=waiting_team): une los estados con OR. Valor desconocido: 422.channel_typequeryNoarray\u003C—>Filtro por canal visible (el mismo valor que channel_type de cada conversación). Multi-valor (?channel_type=whatsapp&channel_type=telegram): une los canales con OR. Valor desconocido: 422.last_message_fromqueryNostring (date-time)Solo conversaciones cuyo último mensaje (last_message_at) es igual o posterior a este instante (ISO 8601 con zona). Sin mensajes no entra en ningún rango.last_message_toqueryNostring (date-time)Solo conversaciones cuyo último mensaje es anterior a este instante (límite exclusivo, [from, to)).bot_pausedqueryNobooleantrue: el bot no responde (una persona tomó la conversación, human, o se pausó, paused). false: solo las que atiende el bot.replied_by_mequeryNobooleantrue: conversaciones donde quien consulta (sesión del panel) mandó al menos un mensaje; false: las demás. Con API key no hay persona: true devuelve una lista vacía.needs_attentionqueryNobooleantrue: solo las conversaciones que necesitan atención; false: solo las que no (F3-487). Se calcula en la consulta con la misma regla que el campo needs_attention y que el conteo de \u002Fconversations\u002Fcounts, así que paginar con offset recorre exactamente ese número de conversaciones.limitqueryNointeger default 50offsetqueryNointeger default 0 Responses StatusDescription200OK (array\u003CConversation>)defaultError (RFC 9457) (Problem)",{"id":3213,"title":3214,"titles":3215,"content":3216,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#get-conversationsid","GET \u002Fconversations\u002F{id}",[3204],"Detalle de una conversación Rol staff (F2-52): conversación de un cliente sin tareas suyas ⇒ 404 (no revela que existe). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (Conversation)defaultError (RFC 9457) (Problem)",{"id":3218,"title":3219,"titles":3220,"content":3221,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#patch-conversationsid","PATCH \u002Fconversations\u002F{id}",[3204],"Actualizar etiquetas y\u002Fo estado del ciclo de vida de una conversación contact_action (F3-143) permite release\u002Freport_spam\u002Fblock\u002Funblock solo con sesión owner\u002Fmanager (contacts:moderate; API key 403). No ejecuta ni confirma tareas retenidas. Parcial: al menos uno de contact_action, tags (reemplaza las etiquetas) o lifecycle (transición manual, F2-35); sin ninguno, 422. Transiciones permitidas: entre pending, waiting_customer, waiting_team hacia cualquiera de ellas, resolved o closed; open solo desde resolved\u002Fclosed (reabrir); desde resolved también a pending\u002Fclosed; desde closed solo a open\u002Fpending. Otra combinación: 409 lifecycle_transition_not_allowed. Mismo estado = no-op idempotente (sin evento). resolution_reason solo con resolved\u002Fclosed (422 si no) y se limpia al reabrir. Cada cambio se audita (sin datos personales) y emite conversation.lifecycle_changed. Roles owner\u002Fmanager\u002Fstaff; viewer 403. API key: scope messages:write. El ciclo de vida es ortogonal al modo bot\u002Fhumano. lifecycle: resolved equivale a POST \u002Fresolve sobre el último entrante (fija resolved_at, emite conversation.resolved); salir de resolved limpia resolved_at. \"Archivar\" = closed (sale de la lista principal con ?lifecycle= de los estados activos; \"desarchivar\" = open). Un mensaje nuevo del cliente reabre una conversación resolved o closed (pasa a pending). Authentication: API key or dashboard sessionScopes: messages:write Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: object Responses StatusDescription200Conversación actualizada (Conversation)defaultError (RFC 9457) (Problem)",{"id":3223,"title":3224,"titles":3225,"content":3226,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#get-conversationsidmessages","GET \u002Fconversations\u002F{id}\u002Fmessages",[3204],"Mensajes de una conversación (cronológico ascendente) Rol staff (F2-52): conversación de un cliente sin tareas suyas ⇒ 404. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstringlimitqueryNointeger default 50beforequeryNostring (date-time)Solo mensajes anteriores a este instante (paginación hacia atrás) Responses StatusDescription200OK (array\u003CMessage>)defaultError (RFC 9457) (Problem)",{"id":3228,"title":3229,"titles":3230,"content":3231,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#post-conversationsidmessages","POST \u002Fconversations\u002F{id}\u002Fmessages",[3204],"Enviar mensaje manual (pone la conversación en modo humano) Persiste una salida delivery_status=pending y el takeover en la misma transacción. El worker entrega después del commit; 201 no confirma aceptación del proveedor. Idempotency-Key opcional deduplica 24 h para sesión de panel y Bearer; una misma clave con otro actor, conversación o texto devuelve 422. Un replay devuelve la respuesta original (puede seguir indicando pending); GET messages muestra el estado actual. Un cliente is_test sólo puede usar simulator, nunca una conexión real. Entrega externa at-least-once: sin idempotencia del proveedor existe ventana ambigua. Rol staff (F2-52): solo a clientes con tareas vigentes en un recurso propio; otra conversación ⇒ 404 y no se envía nada. 409 channel_paused si el dueño pausó ese canal a nivel channel (el equipo tampoco envía hasta reanudarlo). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstringIdempotency-KeyheaderNostring Request body (required) application\u002Fjson: object Responses StatusDescription201Persistido, pendiente de despacho durable (Message)defaultError (RFC 9457) (Problem)",{"id":3233,"title":3234,"titles":3235,"content":3236,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#post-conversationsidmessagesmessage_idintent","POST \u002Fconversations\u002F{id}\u002Fmessages\u002F{message_id}\u002Fintent",[3204],"Registrar una intención explícitamente clasificada por el operador Owner\u002Fmanager con sesión y CSRF, o API key messages:write. Mensaje entrante real de esta conversación y tenant. Clasificación cerrada e inmutable; mismo valor es replay y distinto devuelve 409. No usa texto LLM, no ejecuta la intención ni modifica estado de reservas. Authentication: API key or dashboard sessionScopes: messages:write Parameters NameInRequiredTypeDescriptionidpathYesstringmessage_idpathYesstring (uuid) Request body (required) application\u002Fjson: object Responses StatusDescription200Clasificación persistida (o replay) (MessageIntent)defaultError (RFC 9457) (Problem)",{"id":3238,"title":3239,"titles":3240,"content":3241,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#post-conversationsidmode","POST \u002Fconversations\u002F{id}\u002Fmode",[3204],"Cambiar el modo (takeover \u002F devolver al bot \u002F pausar) Rol staff (F2-52): solo conversaciones de sus clientes; otra ⇒ 404. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: object Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":3243,"title":3244,"titles":3245,"content":3246,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#post-conversationsidnotes","POST \u002Fconversations\u002F{id}\u002Fnotes",[3204],"Agregar un aviso de sistema a la conversación (nunca se envía al cliente) F3-222. Deja un mensaje type=system en el hilo (p. ej. el contexto de un caso de soporte): nace delivery_status=sent, sin destinatario, así que el worker nunca lo despacha por el canal. No cambia el modo (bot\u002Fhumano) ni el ciclo de vida y no cuenta como respuesta del equipo. Roles owner\u002Fmanager (sesión con CSRF) o API key con messages:write; tenant desde la credencial; 404 si la conversación no es de este proyecto. Idempotente por contenido: el mismo texto ya presente como aviso en la conversación devuelve ese aviso (sin otro mensaje ni otra auditoría), con cualquier clave o key. Con API key, Idempotency-Key además deduplica 24 h (la misma clave con otro cuerpo da 409). Auditado conversation.system_note (solo el largo del texto). Authentication: API key or dashboard sessionScopes: messages:write Parameters NameInRequiredTypeDescriptionidpathYesstringIdempotency-KeyheaderNostring Request body (required) application\u002Fjson: object Responses StatusDescription201Aviso guardado en el hilo (Message)defaultError (RFC 9457) (Problem)",{"id":3248,"title":3249,"titles":3250,"content":3251,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#post-conversationsidread","POST \u002Fconversations\u002F{id}\u002Fread",[3204],"Marcar la conversación como leída Rol staff (F2-52): solo conversaciones de sus clientes; otra ⇒ 404. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":3253,"title":3254,"titles":3255,"content":3256,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#post-conversationsidresolve","POST \u002Fconversations\u002F{id}\u002Fresolve",[3204],"Resolver explícitamente la conversación leída Owner\u002Fmanager con sesión y CSRF, o API key messages:write. Tenant de la credencial. message_id debe ser el último entrante persistido del tenant; snapshot obsoleto devuelve 409. Repetir sobre el mismo mensaje no cambia fecha ni duplica audit\u002Fevento. Una nueva entrada real reabre; un replay del webhook no reabre. No cambia el modo ni ejecuta reservas. Authentication: API key or dashboard sessionScopes: messages:write Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: object Responses StatusDescription200Resuelto (o replay de la misma resolución) (ConversationResolution)defaultError (RFC 9457) (Problem)",{"id":3258,"title":3259,"titles":3260,"content":3261,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#get-conversationsidsummary","GET \u002Fconversations\u002F{id}\u002Fsummary",[3204],"Último resumen con IA de la conversación (sin llamar al LLM) Owner, manager y staff. Devuelve el resumen guardado (summary: null si nunca se generó) y stale: true si llegaron mensajes después. Nunca consume IA. Rol staff (F2-52): conversación de un cliente sin tareas suyas ⇒ 404. Viewer ⇒ 403. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (ConversationSummary)defaultError (RFC 9457) (Problem)",{"id":3263,"title":3264,"titles":3265,"content":3266,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#post-conversationsidsummary","POST \u002Fconversations\u002F{id}\u002Fsummary",[3204],"Resumir la conversación con IA (acotado y cacheado) Owner, manager y staff con sesión de panel y CSRF. Texto de lectura para el equipo: el LLM no decide nada. Pasa por el AI gateway (cuota del proyecto, pausa de IA manual y por spam, freno de ráfaga, registro de uso summary.conversation). Solo se leen los últimos 40 mensajes, con tope de caracteres de entrada y 2048 tokens de salida (incluido razonamiento), con un único reintento de hasta 4096 tokens si el contenido llega vacío; los teléfonos y emails se enmascaran ([tel], [email]) antes y después. El último resumen se guarda con el id del último mensaje considerado: sin mensajes nuevos se devuelve el guardado (cached: true) sin llamar al LLM, aunque la IA esté pausada. Rol staff: fuera de su alcance ⇒ 404. 409 ai_paused (pausa del dueño o auto_spam), 429 ai_limit_reached (cuota) y demás ai_* de admisión, 409 ai_unavailable (key pendiente), 422 conversation_empty (sin texto), 502 ai_provider_unavailable (error del proveedor, detail con tipo\u002Fstatus\u002Fmotivo seguros) o ai_empty_response (modelo sin texto tras dos intentos). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200Resumen vigente (generado ahora o reutilizado) (ConversationSummary)defaultError (RFC 9457) (Problem)",{"id":3268,"title":3269,"titles":3270,"content":3271,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#get-conversationscounts","GET \u002Fconversations\u002Fcounts",[3204],"Contadores de conversaciones por estado del ciclo de vida Cantidad de conversaciones por lifecycle (siempre las seis claves, con 0) y total, para los contadores de la Bandeja. Excluye las sesiones de prueba (is_test), igual que la lista. mode opcional restringe por modo bot\u002Fhumano. Lectura para cualquier rol; API key: scope messages:read (F2-35). Authentication: API key or dashboard sessionScopes: messages:read Parameters NameInRequiredTypeDescriptionmodequeryNobot, human, paused Responses StatusDescription200OK (ConversationLifecycleCounts)defaultError (RFC 9457) (Problem)",{"id":3273,"title":3274,"titles":3275,"content":3276,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fconversations#get-conversationsstream","GET \u002Fconversations\u002Fstream",[3204],"Avisos en vivo del inbox (SSE) text\u002Fevent-stream. Eventos message.received, message.sent y conversation.updated con\n{event, workspace_id, conversation_id, mode, lifecycle, unread_count, channel_type, message_id?, direction?}. channel_type es null si la conversación ya fue eliminada. Son avisos:\nel cliente vuelve a pedir la lista y los mensajes. Rol staff (F2-52): solo recibe los avisos de las\nconversaciones que puede ver en ese momento; el resto se descarta en el servidor. Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200Stream abiertodefaultError (RFC 9457) (Problem)",{"id":3278,"title":3279,"titles":3280,"content":3281,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fsimulator","API · simulator",[],"simulator operations in the OpenAPI contract that accept an API key.",{"id":3283,"title":3284,"titles":3285,"content":3286,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsimulator#post-simulatorclock","POST \u002Fsimulator\u002Fclock",[3279],"Fijar (o borrar con now = null) el reloj simulado del workspace Solo si ENV != production; en producción responde 403. El instante fijado sigue corriendo en tiempo real. Authentication: API key or dashboard sessionScopes: None Request body (required) application\u002Fjson: object Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":3288,"title":3289,"titles":3290,"content":3291,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsimulator#delete-simulatordata","DELETE \u002Fsimulator\u002Fdata",[3279],"Purgar todo lo is_test del workspace Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200Purgado (SimulatorPurge)defaultError (RFC 9457) (Problem)",{"id":3293,"title":3294,"titles":3295,"content":3296,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsimulator#get-simulatorsessions","GET \u002Fsimulator\u002Fsessions",[3279],"Listar las sesiones de simulador del workspace Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200OK (array\u003CSimulatorSession>)defaultError (RFC 9457) (Problem)",{"id":3298,"title":3299,"titles":3300,"content":3301,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsimulator#post-simulatorsessions","POST \u002Fsimulator\u002Fsessions",[3279],"Crear una sesión de simulador (cliente de prueba + conversación) Canal simulator (F2-12, ADR 0013): mismo pipeline que WhatsApp, sin proveedor externo.\nSolo panel (sesión + CSRF), roles owner\u002Fmanager; el tenant sale de la sesión.\nEl cliente queda is_test (fuera de listados reales, automatizaciones y reportes). Authentication: API key or dashboard sessionScopes: None Request body (optional) application\u002Fjson: SimulatorSessionCreate Responses StatusDescription201Creada (SimulatorSession)defaultError (RFC 9457) (Problem)",{"id":3303,"title":3304,"titles":3305,"content":3306,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsimulator#delete-simulatorsessionssession_id","DELETE \u002Fsimulator\u002Fsessions\u002F{session_id}",[3279],"Borrar una sesión (cliente, conversación, mensajes y reservas de prueba) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsession_idpathYesstring (uuid) Responses StatusDescription204BorradadefaultError (RFC 9457) (Problem)",{"id":3308,"title":3309,"titles":3310,"content":3311,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsimulator#get-simulatorsessionssession_idmessages","GET \u002Fsimulator\u002Fsessions\u002F{session_id}\u002Fmessages",[3279],"Mensajes de la sesión con la traza del bot (debug) para el inspector Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsession_idpathYesstring (uuid) Responses StatusDescription200OK (array\u003CSimulatorMessage>)defaultError (RFC 9457) (Problem)",{"id":3313,"title":3314,"titles":3315,"content":3316,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsimulator#post-simulatorsessionssession_idmessages","POST \u002Fsimulator\u002Fsessions\u002F{session_id}\u002Fmessages",[3279],"Enviar un mensaje como el cliente de prueba Mismo camino que el webhook entrante (persistir, SSE, cola). La respuesta del bot llega por GET \u002Fv1\u002Fconversations\u002Fstream. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsession_idpathYesstring (uuid) Request body (required) application\u002Fjson: object Responses StatusDescription202Aceptado (object)defaultError (RFC 9457) (Problem)",{"id":3318,"title":3319,"titles":3320,"content":3321,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations","API · automations",[],"automations operations in the OpenAPI contract that accept an API key.",{"id":3323,"title":3324,"titles":3325,"content":3326,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#get-automations","GET \u002Fautomations",[3319],"Listar automatizaciones del workspace actual Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200OK (array\u003CAutomation>)defaultError (RFC 9457) (Problem)",{"id":3328,"title":3329,"titles":3330,"content":3331,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#post-automations","POST \u002Fautomations",[3319],"Crear una automatización F3-184: los avisos al cliente al entrar en una etapa (workitem.stage_entered) y el de confirmación (booking.confirmed) no son reglas: se configuran como on_enter.notify_customer (con enabled) en las etapas del servicio (PUT \u002Fservices\u002F{id}\u002Fstages). Crear una regla al cliente con esos disparadores responde 422; para demoras o condiciones se usa un flujo sobre workitem.stage_entered. Authentication: API key or dashboard sessionScopes: None Request body (required) application\u002Fjson: AutomationCreate Responses StatusDescription201Creada (Automation)defaultError (RFC 9457) (Problem)",{"id":3333,"title":3334,"titles":3335,"content":3336,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#patch-automationsid","PATCH \u002Fautomations\u002F{id}",[3319],"Editar o apagar una automatización y regenerar sus jobs abiertos Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: AutomationPatch Responses StatusDescription200Actualizada (Automation)defaultError (RFC 9457) (Problem)",{"id":3338,"title":3339,"titles":3340,"content":3341,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#get-automationscustomer-noticesdeliveries","GET \u002Fautomations\u002Fcustomer-notices\u002Fdeliveries",[3319],"Customer Notice Deliveries Owner\u002Fmanager; tenant desde credencial. Bitácora de intentos, sin texto ni datos del canal. Retención 90 días. Políticas por servicio inicialmente apagadas; cambios auditados. PUT exige CSRF para sesión. Authentication: API key or dashboard sessionScopes: config:read Parameters NameInRequiredTypeDescriptionwork_item_idqueryNostring \u002F null (null)customer_idqueryNostring \u002F null (null)statusqueryNostring \u002F null (null)beforequeryNostring \u002F null (null)limitqueryNointeger default 50 Responses StatusDescription200Successful Response (array\u003CCustomerNoticeDeliveryOut>)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3343,"title":3344,"titles":3345,"content":3346,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#get-automationscustomer-noticespolicies","GET \u002Fautomations\u002Fcustomer-notices\u002Fpolicies",[3319],"Customer Notice Policies Owner\u002Fmanager; tenant desde credencial. Bitácora de intentos, sin texto ni datos del canal. Retención 90 días. Políticas por servicio inicialmente apagadas; cambios auditados. PUT exige CSRF para sesión. Authentication: API key or dashboard sessionScopes: config:read Responses StatusDescription200Successful Response (array\u003CCustomerNoticePolicyOut>)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3348,"title":3349,"titles":3350,"content":3351,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#put-automationscustomer-noticespolicies","PUT \u002Fautomations\u002Fcustomer-notices\u002Fpolicies",[3319],"Customer Notice Policy Save Owner\u002Fmanager; tenant desde credencial. Bitácora de intentos, sin texto ni datos del canal. Retención 90 días. Políticas por servicio inicialmente apagadas; cambios auditados. PUT exige CSRF para sesión. Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: CustomerNoticePolicyIn Responses StatusDescription200Successful Response (CustomerNoticePolicyOut)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3353,"title":3354,"titles":3355,"content":3356,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#post-automationscustomer-noticespreview","POST \u002Fautomations\u002Fcustomer-notices\u002Fpreview",[3319],"Customer Notice Previews Owner\u002Fmanager + CSRF; tenant desde sesión. Solo lectura, sin enviar ni guardar: texto real de plantilla con datos de ejemplo, vocabulario\u002Fidioma del borrador, canal disponible. Los textos de flujos muestran sus bindings sin resolver. Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: CustomerNoticePreviewIn Responses StatusDescription200Successful Response (CustomerNoticePreviews)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3358,"title":3359,"titles":3360,"content":3361,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#get-automationsrecommended","GET \u002Fautomations\u002Frecommended",[3319],"Automatizaciones recomendadas por rasgos del proyecto Unión sin duplicados de los ejemplos parecidos (F3-409), con su estado real y una vista previa en el idioma del proyecto, con datos de muestra. Sin rasgos también ofrece recomendaciones generales. El alias de transición blueprint identifica el ejemplo más parecido o es nulo. Instalar siempre crea inactivas y conserva las ediciones existentes. Owner\u002Fmanager. Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200OK (RecommendedAutomations)defaultError (RFC 9457) (Problem)",{"id":3363,"title":3364,"titles":3365,"content":3366,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#put-automationsrecommendedkeyactivation","PUT \u002Fautomations\u002Frecommended\u002F{key}\u002Factivation",[3319],"Activar o pausar una recomendada La instala antes si el proyecto todavía no la tiene. Idempotente. Activar una regla no reprograma el pasado. 404 recommended_automation_not_found si la clave no es del blueprint. Owner\u002Fmanager. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionkeypathYesstring Request body (required) application\u002Fjson: RecommendedActivation Responses StatusDescription200Estado resultante (RecommendedAutomation)defaultError (RFC 9457) (Problem)",{"id":3368,"title":3369,"titles":3370,"content":3371,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#post-automationsrecommendedinstall","POST \u002Fautomations\u002Frecommended\u002Finstall",[3319],"Instalar las recomendadas que falten (inactivas) Idempotente; no duplica ni pisa lo que el negocio editó. installed cuenta las creadas por esta llamada. Los proyectos nuevos ya las traen instaladas e inactivas. Owner\u002Fmanager. Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200OK (RecommendedAutomations)defaultError (RFC 9457) (Problem)",{"id":3373,"title":3374,"titles":3375,"content":3376,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#get-automationsstage-options","GET \u002Fautomations\u002Fstage-options",[3319],"Etapas y acciones válidas para las reglas por etapa Claves y etiquetas pt\u002Fes\u002Fen del blueprint vigente del workspace (vacío si no tiene). Son los valores admitidos por stage y action_key. Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200OK (AutomationStageOptions)defaultError (RFC 9457) (Problem)",{"id":3378,"title":3379,"titles":3380,"content":3381,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#get-noticesoverview","GET \u002Fnotices\u002Foverview",[3319],"Notices Overview Todo lo que sale al cliente (reglas, política por servicio, etapas y flujos), ordenado en el tiempo del servicio. Cada fila trae su valor efectivo, el motivo si está frenada y dónde se edita. Solo lectura. Dueño o encargado; tenant desde credencial. Authentication: API key or dashboard sessionScopes: config:read Parameters NameInRequiredTypeDescriptionaudiencequeryNostring default customerservice_idqueryNostring \u002F null (null) Responses StatusDescription200Successful Response (NoticeOverview)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3383,"title":3384,"titles":3385,"content":3386,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#patch-noticesoverview","PATCH \u002Fnotices\u002Foverview",[3319],"Notices Master «Apagar todos los avisos a clientes»: el único interruptor del proyecto; gana sobre el de cada fila. Dueño o encargado; tenant desde credencial. Exige CSRF para sesión. Escribe en la fuente de cada aviso, con su validación y auditoría. Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: NoticeMasterPatch Responses StatusDescription200Successful Response (NoticeOverview)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3388,"title":3389,"titles":3390,"content":3391,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fautomations#patch-noticesoverviewitem_id","PATCH \u002Fnotices\u002Foverview\u002F{item_id}",[3319],"Notices Item Enciende o apaga una fila: escribe en su fuente (regla, política, etapa o flujo) con su validación. Dueño o encargado; tenant desde credencial. Exige CSRF para sesión. Escribe en la fuente de cada aviso, con su validación y auditoría. Las filas stage publican el flujo y requieren además flows:write (solo dueño) o settings:write junto con config:write para API key. Sin el permiso de origen responde 403; la lectura devuelve toggleable=false para esa fila. Authentication: API key or dashboard sessionScopes: config:write, flows:write, settings:write Parameters NameInRequiredTypeDescriptionitem_idpathYesstring Request body (required) application\u002Fjson: NoticeItemPatch Responses StatusDescription200Successful Response (NoticeItem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3393,"title":3394,"titles":3395,"content":3396,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform","API · platform",[],"platform operations in the OpenAPI contract that accept an API key.",{"id":3398,"title":3399,"titles":3400,"content":3401,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-connectionprojects","GET \u002Fconnection\u002Fprojects",[3394],"Proyectos a los que llega la credencial FIU-498 (ADR 0054). Con un token OAuth del MCP del dueño, los proyectos vigentes de la conexión (los que pasan la revalidación de rol y estado en cada pedido), sin necesitar X-Wagend-Project. Con una API key, su único proyecto. Respalda la herramienta list_projects del MCP. Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200Proyectos de la credencial (ConnectionProjectList)defaultError (RFC 9457) (Problem)",{"id":3403,"title":3404,"titles":3405,"content":3406,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-demorestore","GET \u002Fdemo\u002Frestore",[3394],"Estado del botón «Restaurar demo» FIU-483. Owner, manager o colaborador del demo de la credencial (nunca un id del path). Dice si el demo tiene foto base (available), de cuándo es, desde cuándo se puede volver a usar el botón (uno cada 10 minutos por demo) y la última restauración a demanda. 404 not_a_demo si el proyecto no es un demo de la suite con la marca de demo (o tiene cobros reales). Cache-Control no-store. Authentication: API key or dashboard sessionScopes: config:read Responses StatusDescription200Estado del botón (DemoRestoreStatus)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)",{"id":3408,"title":3409,"titles":3410,"content":3411,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#post-demorestore","POST \u002Fdemo\u002Frestore",[3394],"Restaurar el demo a su foto base FIU-483. El reset liviano de ESTE demo, en segundos (cookie con X-Csrf-Token o API key, p. ej. Wagy por el MCP). Borra todo lo creado desde la foto (tareas, clientes, cobros, conversaciones, gastos, archivos…), vuelve a la foto lo editado o borrado y mueve sus fechas al día; conserva el proyecto, los canales e integraciones, el MCP, las API keys, los miembros con cuenta y la IA. Un demo por vez (409 demo_reset_busy, también mientras corre la limpieza de la noche) y uno cada 10 minutos (429 demo_restore_cooldown, con Retry-After). Si no se puede (sin foto o no quedó igual a la foto) no cambia nada (409 demo_restore_unavailable) y la noche corre el reset completo. Audita demo.restored. Authentication: API key or dashboard sessionScopes: settings:write Responses StatusDescription200Demo restaurado (DemoRestoreResult)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":3413,"title":3414,"titles":3415,"content":3416,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-demostatus","GET \u002Fdemo\u002Fstatus",[3394],"¿El proyecto es un demo de la suite? (chip «Demo») FIU-514. Solo lectura, para cualquier miembro del proyecto (el panel muestra el chip «Demo» a todos; los controles siguen detrás de demo:restore en \u002Fdemo\u002Frestore). Devuelve is_demo (siempre true) y si el demo tiene foto base (available); sin fechas ni historial. 404 not_a_demo si el proyecto no es un demo de la suite con la marca de demo (o tiene cobros reales). Cache-Control no-store. Authentication: API key or dashboard sessionScopes: config:read Responses StatusDescription200Estado del demo (DemoStatus)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)",{"id":3418,"title":3419,"titles":3420,"content":3421,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-me","GET \u002Fme",[3394],"Workspace y scopes de la credencial actual Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200OK (Me)defaultError (RFC 9457) (Problem)",{"id":3423,"title":3424,"titles":3425,"content":3426,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-partneractivity","GET \u002Fpartner\u002Factivity",[3394],"Actividad de la cartera del partner Sesión de panel del partner (FIU-434). Hitos de sus clientes, del más nuevo al más viejo: alta, canal conectado, primera tarea (reserva o pedido), primer cobro del plan (solo la fecha, sin monto), prueba que empieza a vencer (a 7 días, con due_at) y cliente que se apagó (14 días sin uso). Paginado por cursor; sin contenido. Con Bearer (FIU-439) exige partner:read y el partner es quien emitió la credencial. Sin caché. Authentication: API key or dashboard sessionScopes: partner:read Parameters NameInRequiredTypeDescriptionlimitqueryNointeger default 30cursorqueryNostring \u002F null (null) Responses StatusDescription200Actividad de la cartera del partner (ActivityPage)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3428,"title":3429,"titles":3430,"content":3431,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-partnerclients","GET \u002Fpartner\u002Fclients",[3394],"Mis clientes (cartera del partner) Sesión de panel del partner (FIU-434). El directorio del superadmin (FIU-430) acotado a los proyectos con la etiqueta del partner de la sesión: plan o prueba, semáforo de salud con sus motivos, último uso, tareas y conversaciones en 30 días, canales conectados y alertas (prueba que vence, canal caído, sin uso hace 14 días). Conteos y estados, sin costos ni contenido: el contenido se ve al entrar al proyecto. Orden estable por columna e ID con cursor (otro orden da 422); filtros rápidos como el directorio. Con Bearer (FIU-439) exige partner:read y el partner es quien emitió la credencial. Sin caché. Authentication: API key or dashboard sessionScopes: partner:read Parameters NameInRequiredTypeDescriptionsortqueryNostring last_activity, name, created_at, tasks_30d, conversations_30d default last_activityorderqueryNostring asc, desc default desclimitqueryNointeger default 50cursorqueryNostring \u002F null (null)quickqueryNostring \u002F null (null) Responses StatusDescription200Mis clientes (cartera del partner) (PartnerClientPage)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3433,"title":3434,"titles":3435,"content":3436,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-partnerclientsworkspace_id","GET \u002Fpartner\u002Fclients\u002F{workspace_id}",[3394],"Un cliente de la cartera del partner Sesión de panel del partner o Bearer con partner:read (FIU-439). La fila del cliente en «Mis clientes» (mismos conteos, estados y alertas, sin costos ni contenido) y sus hitos de Actividad, del más nuevo al más viejo. Un proyecto que no es de la cartera del partner da 404 client_not_found, igual que uno inexistente. Sin caché. Authentication: API key or dashboard sessionScopes: partner:read Parameters NameInRequiredTypeDescriptionworkspace_idpathYesstring (uuid) Responses StatusDescription200Un cliente de la cartera del partner (PartnerClientDetail)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3438,"title":3439,"titles":3440,"content":3441,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-partnerclientsworkspace_idaudit","GET \u002Fpartner\u002Fclients\u002F{workspace_id}\u002Faudit",[3394],"Puntaje de puesta a punto de un cliente de la cartera Sesión de panel del partner o Bearer con partner:read (FIU-524). Misma auditoría que GET \u002Fv1\u002Fworkspace\u002Faudit, solo lectura, del proyecto indicado. Un proyecto que no es de la cartera del partner da 404, igual que uno inexistente. Sin caché. Authentication: API key or dashboard sessionScopes: partner:read Parameters NameInRequiredTypeDescriptionworkspace_idpathYesstring (uuid)langqueryNostring pt, es, en Responses StatusDescription200Puntaje y lo que falta (SetupAudit)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3443,"title":3444,"titles":3445,"content":3446,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-partnercourses","GET \u002Fpartner\u002Fcourses",[3394],"Cursos del partner (Aprendé) Cursos revisados por Javier. Sin ninguno la lista va vacía y el panel no muestra la sección. Con Bearer (API key u OAuth del MCP) exige partner:read y el partner es quien emitió la credencial, mientras siga siendo miembro activo del proyecto de la credencial (si no, 403). Authentication: API key or dashboard sessionScopes: partner:read Parameters NameInRequiredTypeDescriptionlangqueryNostring pt, es, en default pt Responses StatusDescription200Contenido del panel del partner (CourseList)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3448,"title":3449,"titles":3450,"content":3451,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-partnerkit","GET \u002Fpartner\u002Fkit",[3394],"Kit para vender del partner Kit para vender: mensajes por rubro y plantillas de proyecto, con el link ?ref del partner ya puesto. Con Bearer (API key u OAuth del MCP) exige partner:read y el partner es quien emitió la credencial, mientras siga siendo miembro activo del proyecto de la credencial (si no, 403). Authentication: API key or dashboard sessionScopes: partner:read Parameters NameInRequiredTypeDescriptionlangqueryNostring pt, es, en default pt Responses StatusDescription200Contenido del panel del partner (PartnerKit)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3453,"title":3454,"titles":3455,"content":3456,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-partnernews","GET \u002Fpartner\u002Fnews",[3394],"Novedades para el partner Novedades del sitio con la etiqueta partners primero y la última para negocios, lista para compartir. Con Bearer (API key u OAuth del MCP) exige partner:read y el partner es quien emitió la credencial, mientras siga siendo miembro activo del proyecto de la credencial (si no, 403). Authentication: API key or dashboard sessionScopes: partner:read Parameters NameInRequiredTypeDescriptionlangqueryNostring pt, es, en default pt Responses StatusDescription200Contenido del panel del partner (PartnerNews)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3458,"title":3459,"titles":3460,"content":3461,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-partnertoday","GET \u002Fpartner\u002Ftoday",[3394],"Hoy del panel del partner Sesión de panel del partner (FIU-434). Saludo con el nombre de la cuenta, el partner (sin comisión ni contacto), progreso de la cartera (clientes, activos en 30 días y fecha del primero), una sola próxima acción (canal caído, prueba que vence, conectar un canal, cliente que se apaga o, sin clientes, crear el primero) y las alertas con algún cliente (las vacías no vienen). 403 partner_required si la cuenta no es de un partner. Con Bearer (API key u OAuth del MCP, FIU-439) exige partner:read y el partner es quien emitió la credencial, mientras siga siendo miembro activo del proyecto de la credencial (si no, 403). Sin caché. Authentication: API key or dashboard sessionScopes: partner:read Responses StatusDescription200Hoy del panel del partner (PartnerToday)403Error (RFC 9457) (Problem)",{"id":3463,"title":3464,"titles":3465,"content":3466,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-webhook-endpoints","GET \u002Fwebhook-endpoints",[3394],"Listar endpoints de webhooks (owner\u002Fmanager o scope webhooks:manage) Authentication: API key or dashboard sessionScopes: webhooks:manage Responses StatusDescription200OK (object)defaultError (RFC 9457) (Problem)",{"id":3468,"title":3469,"titles":3470,"content":3471,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#post-webhook-endpoints","POST \u002Fwebhook-endpoints",[3394],"Crear endpoint (webhooks:manage). El secreto se devuelve una sola vez. URL https obligatoria; se resuelve el DNS y se rechazan IPs privadas, loopback, link-local y metadatos\nde nube (422 unsafe_webhook_url). Máximo 10 por workspace (409 webhook_limit_reached). No admite\nIdempotency-Key (400 idempotency_not_supported): la respuesta contiene el secreto. Cache-Control: no-store.\nSolo los tipos de EventType se pueden suscribir: un tipo desconocido responde 422 invalid_webhook\ncon unsupported_events y supported_events. Las entregas usan data.booking, data.payment,\ndata.message, data.conversation o data.action según la familia del evento; no incluyen texto de mensajes. Authentication: API key or dashboard sessionScopes: webhooks:manage Request body (required) application\u002Fjson: object Responses StatusDescription201Creado (``WebhookEndpoint \u002F object)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3473,"title":3474,"titles":3475,"content":3476,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-webhook-endpointsid","GET \u002Fwebhook-endpoints\u002F{id}",[3394],"Ver un endpoint Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200OK (WebhookEndpoint)defaultError (RFC 9457) (Problem)",{"id":3478,"title":3479,"titles":3480,"content":3481,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#patch-webhook-endpointsid","PATCH \u002Fwebhook-endpoints\u002F{id}",[3394],"Cambiar URL, eventos o activar\u002Fdesactivar (reactivar pone en cero los fallos) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Request body (required) application\u002Fjson: object Responses StatusDescription200OK (WebhookEndpoint)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3483,"title":3484,"titles":3485,"content":3486,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#delete-webhook-endpointsid","DELETE \u002Fwebhook-endpoints\u002F{id}",[3394],"Borrar el endpoint y su log de entregas Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription204BorradodefaultError (RFC 9457) (Problem)",{"id":3488,"title":3489,"titles":3490,"content":3491,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-webhook-endpointsiddeliveries","GET \u002Fwebhook-endpoints\u002F{id}\u002Fdeliveries",[3394],"Log de entregas del endpoint (más nueva primero) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstringlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200Página (object)defaultError (RFC 9457) (Problem)",{"id":3493,"title":3494,"titles":3495,"content":3496,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#post-webhook-endpointsiddeliveriesdelivery_idresend","POST \u002Fwebhook-endpoints\u002F{id}\u002Fdeliveries\u002F{delivery_id}\u002Fresend",[3394],"Reenviar una entrega (vuelve a la cola con los intentos en cero) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstringdelivery_idpathYesstring Responses StatusDescription202Reencolada (WebhookDelivery)409El endpoint está deshabilitadodefaultError (RFC 9457) (Problem)",{"id":3498,"title":3499,"titles":3500,"content":3501,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#post-webhook-endpointsidping","POST \u002Fwebhook-endpoints\u002F{id}\u002Fping",[3394],"Encolar un evento de prueba webhook.ping (un solo intento) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription202Entrega encolada (WebhookDelivery)defaultError (RFC 9457) (Problem)",{"id":3503,"title":3504,"titles":3505,"content":3506,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#post-webhook-endpointsidrotate-secret","POST \u002Fwebhook-endpoints\u002F{id}\u002Frotate-secret",[3394],"Rotar el secreto de firma (el anterior deja de valer; se muestra una sola vez) Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring Responses StatusDescription200Endpoint con el secreto nuevo (Cache-Control: no-store) (``WebhookEndpoint \u002F object)defaultError (RFC 9457) (Problem)",{"id":3508,"title":3509,"titles":3510,"content":3511,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#post-workspaceexamples","POST \u002Fworkspace\u002Fexamples",[3394],"Componer de 1 a 3 ejemplos por parte (owner; requiere X-Csrf-Token) F3-407 (ADR 0036 fase 2). Aplica las partes pedidas (vocabulary, flows, automations, catalog; todas por defecto) de cada ejemplo, idempotente por ejemplo y parte (lo ya aplicado devuelve already_applied) y sin duplicar por nombre. Nunca crea personas ni recursos (decisiones 1, 12 y 13 del dueño); el catálogo son servicios y productos inactivos y sin precio sobre la agenda que el negocio ya tiene (resource_group_id o, si hay uno solo, ese grupo); sin agenda queda skipped con needs_agenda. El vocabulario suma términos ausentes conservando el primer preset y los términos existentes; no modifica uno editado por el negocio (vocabulary_already_set). Tope de 3 ejemplos distintos por proyecto (409 examples_limit); ejemplo desconocido 409 unknown_example. La parte flows del taller y del lavadero activa además Vehículos (created.asset_type, FIU-610; nunca crea bienes) y su deshacer lo desactiva, sin borrarlo, si nadie lo tocó y no tiene bienes (si no, kept.asset_type). Serializa con la fila del workspace y audita workspace.blueprint_applied y workspace.example_applied por parte. Permiso workspace:blueprint; sin API key. Authentication: API key or dashboard sessionScopes: settings:write Parameters NameInRequiredTypeDescriptionX-Csrf-TokenheaderYesstring Request body (required) application\u002Fjson: ExamplesInput Responses StatusDescription200Resultado por ejemplo y parte, y estado de rasgos y ejemplos aplicados (ExamplesResult)409Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3513,"title":3514,"titles":3515,"content":3516,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#delete-workspaceexampleskey","DELETE \u002Fworkspace\u002Fexamples\u002F{key}",[3394],"Deshacer una parte (o todas) de un ejemplo (owner; requiere X-Csrf-Token) F3-407. Vocabulario, vuelve al anterior si nadie lo cambió; flujos, desactiva los que nadie editó ni usa; automatizaciones, retira las que siguen inactivas y sin uso; catálogo, borra los servicios que siguen sin ediciones y sin tareas (los productos nunca se borran, ya nacen inactivos). Lo que se queda sale en kept y deja de ser del ejemplo. Una parte no aplicada devuelve not_applied. Audita workspace.example_undone. Permiso workspace:blueprint; sin API key. Authentication: API key or dashboard sessionScopes: settings:write Parameters NameInRequiredTypeDescriptionkeypathYesstringpartqueryNoExamplePart \u002F null (null)X-Csrf-TokenheaderYesstring Responses StatusDescription200Resultado por parte y estado de rasgos y ejemplos aplicados (ExamplesResult)defaultError (RFC 9457) (Problem)",{"id":3518,"title":3519,"titles":3520,"content":3521,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fplatform#get-workspacetemplate","GET \u002Fworkspace\u002Ftemplate",[3394],"Exportar la configuración del proyecto como plantilla (owner) La configuración del proyecto como plantilla JSON (ADR 0042, FIU-523): flujos con la raíz de atención y las intenciones, servicios, productos, planes, base de ayuda, textos del bot, automatizaciones, encadenamientos, vocabulario y tipos de bien del cliente activos (customer_asset_types, FIU-610: uno de fábrica viaja como {key, preset}), todo por ref y sin ids. Nunca clientes ni sus bienes, tareas, cobros, canales, credenciales, API keys ni secretos. Audita template.exported en el origen. Se descarga como archivo (Content-Disposition). Permiso workspace:template_export; con API key, config:read. Authentication: API key or dashboard sessionScopes: config:read Responses StatusDescription200Plantilla del proyecto (ProjectTemplate)403Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3523,"title":3524,"titles":3525,"content":3526,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fauth","API · auth",[],"auth operations in the OpenAPI contract that accept an API key.",{"id":3528,"title":3529,"titles":3530,"content":3531,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fauth#get-authme","GET \u002Fauth\u002Fme",[3524],"Sesión del panel (usuario, workspace activo, rol y membresías) Requiere la cookie de sesión del panel (no acepta API keys). Sin secretos ni hash; el tenant sale de la sesión. Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200OK (SessionInfo)401Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3533,"title":3534,"titles":3535,"content":3536,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge","API · knowledge",[],"knowledge operations in the OpenAPI contract that accept an API key.",{"id":3538,"title":3539,"titles":3540,"content":3541,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#get-knowledge","GET \u002Fknowledge",[3534],"Listar los ítems de la base de conocimiento del bot Sesión con cualquier rol, o API key con config:read. Sin paginación (lista completa del workspace). Authentication: API key or dashboard sessionScopes: config:read Parameters NameInRequiredTypeDescriptiontypequeryNostring text, faq, catalog_item, file, web, listinginclude_inactivequeryNoboolean default false Responses StatusDescription200Ítems (array\u003CKnowledgeItem>)defaultError (RFC 9457) (Problem)",{"id":3543,"title":3544,"titles":3545,"content":3546,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#post-knowledge","POST \u002Fknowledge",[3534],"Crear un ítem de conocimiento (texto, FAQ o ítem de catálogo) Owner\u002Fmanager con CSRF, o API key con config:write. Con AI_LIMITS_ENABLED activo, admisión externa puede devolver 429 (ai_limit_reached, ai_usage_uncertain, ai_busy, ai_request_rate_limited). Calcula el embedding (503 si no hay proveedor de embeddings configurado, 502 si falla). Auditado. Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: KnowledgeItemCreate Responses StatusDescription201Creado (versión 1) (KnowledgeItem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)502Error (RFC 9457) (Problem)503Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3548,"title":3549,"titles":3550,"content":3551,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#patch-knowledgeitem_id","PATCH \u002Fknowledge\u002F{item_id}",[3534],"Editar un ítem (nueva versión) o activarlo\u002Fdesactivarlo Owner\u002Fmanager con CSRF, o API key con config:write. Cambiar título o contenido sube version y requiere embedding; con admisión IA activada puede devolver429 ai_limit_reached\u002Fai_usage_uncertain\u002Fai_busy\u002Fai_request_rate_limited sin cambiar el ítem. Cambios de active no usan IA. Auditado. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionitem_idpathYesstring (uuid) Request body (required) application\u002Fjson: KnowledgeItemUpdate Responses StatusDescription200Ítem actualizado (KnowledgeItem)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)502Error (RFC 9457) (Problem)503Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3553,"title":3554,"titles":3555,"content":3556,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#delete-knowledgeitem_id","DELETE \u002Fknowledge\u002F{item_id}",[3534],"Dar de baja un ítem (baja lógica) Owner\u002Fmanager con CSRF, o API key con config:write. El ítem deja de responder en el bot pero se conserva su historial; devuelve el ítem con active=false. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionitem_idpathYesstring (uuid) Responses StatusDescription200Ítem dado de baja (KnowledgeItem)404Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3558,"title":3559,"titles":3560,"content":3561,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#post-knowledgefiles","POST \u002Fknowledge\u002Ffiles",[3534],"Subir un PDF a la base de conocimiento Owner\u002Fmanager con CSRF, o API key con config:write. 422 si el PDF es inválido, ilegible o supera el tamaño máximo. El PDF va como cuerpo crudo con Content-Type application\u002Fpdf (sin multipart, un archivo por llamada); tamaño máximo acotado por el servidor. Se parte en ítems de tipo file. Admisión IA opt-in puede devolver429 con códigos ai_limit_reached\u002Fai_usage_uncertain\u002Fai_busy\u002Fai_request_rate_limited; una denegación revierte la ingesta. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionfilenamequeryYesstring Request body (required) application\u002Fpdf: string Responses StatusDescription201Ítems creados a partir del PDF (array\u003CKnowledgeItem>)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)502Error (RFC 9457) (Problem)503Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3563,"title":3564,"titles":3565,"content":3566,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#get-knowledgelive-queries","GET \u002Fknowledge\u002Flive-queries",[3534],"GET consulta HTTP en vivo (F2-49) Solo sesión owner\u002Fmanager; escrituras con CSRF. API keys sin acceso. HTTPS GET público con IP fijada y validación por salto, 3 s totales, 64 KiB descomprimidos y 2 KiB mapeados. Credenciales cifradas de escritura únicamente. Schema cerrado de hasta 8 parámetros escalares, mapeo declarativo. Máximo 10 consultas; expected_version evita sobrescribir cambios. La baja desactiva y conserva historial. Pruebas aplican cache tenant\u002Fconsulta\u002Fversión\u002Fparámetros, cuotas y circuito como el bot; errores externos son resultado ok=false sin contenido crudo. Sin PII en auditoría. Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200Resultado (array\u003CLiveQueryOut>)defaultError (RFC 9457) (Problem)",{"id":3568,"title":3569,"titles":3570,"content":3571,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#post-knowledgelive-queries","POST \u002Fknowledge\u002Flive-queries",[3534],"POST consulta HTTP en vivo (F2-49) Solo sesión owner\u002Fmanager; escrituras con CSRF. API keys sin acceso. HTTPS GET público con IP fijada y validación por salto, 3 s totales, 64 KiB descomprimidos y 2 KiB mapeados. Credenciales cifradas de escritura únicamente. Schema cerrado de hasta 8 parámetros escalares, mapeo declarativo. Máximo 10 consultas; expected_version evita sobrescribir cambios. La baja desactiva y conserva historial. Pruebas aplican cache tenant\u002Fconsulta\u002Fversión\u002Fparámetros, cuotas y circuito como el bot; errores externos son resultado ok=false sin contenido crudo. Sin PII en auditoría. Authentication: API key or dashboard sessionScopes: None Request body (required) application\u002Fjson: LiveQueryCreate Responses StatusDescription201Resultado (LiveQueryOut)defaultError (RFC 9457) (Problem)",{"id":3573,"title":3574,"titles":3575,"content":3576,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#put-knowledgelive-queriesquery_id","PUT \u002Fknowledge\u002Flive-queries\u002F{query_id}",[3534],"PUT consulta HTTP en vivo (F2-49) Solo sesión owner\u002Fmanager; escrituras con CSRF. API keys sin acceso. HTTPS GET público con IP fijada y validación por salto, 3 s totales, 64 KiB descomprimidos y 2 KiB mapeados. Credenciales cifradas de escritura únicamente. Schema cerrado de hasta 8 parámetros escalares, mapeo declarativo. Máximo 10 consultas; expected_version evita sobrescribir cambios. La baja desactiva y conserva historial. Pruebas aplican cache tenant\u002Fconsulta\u002Fversión\u002Fparámetros, cuotas y circuito como el bot; errores externos son resultado ok=false sin contenido crudo. Sin PII en auditoría. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionquery_idpathYesstring (uuid) Request body (required) application\u002Fjson: LiveQueryUpdate Responses StatusDescription200Resultado (LiveQueryOut)defaultError (RFC 9457) (Problem)",{"id":3578,"title":3579,"titles":3580,"content":3581,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#delete-knowledgelive-queriesquery_id","DELETE \u002Fknowledge\u002Flive-queries\u002F{query_id}",[3534],"DELETE consulta HTTP en vivo (F2-49) Solo sesión owner\u002Fmanager; escrituras con CSRF. API keys sin acceso. HTTPS GET público con IP fijada y validación por salto, 3 s totales, 64 KiB descomprimidos y 2 KiB mapeados. Credenciales cifradas de escritura únicamente. Schema cerrado de hasta 8 parámetros escalares, mapeo declarativo. Máximo 10 consultas; expected_version evita sobrescribir cambios. La baja desactiva y conserva historial. Pruebas aplican cache tenant\u002Fconsulta\u002Fversión\u002Fparámetros, cuotas y circuito como el bot; errores externos son resultado ok=false sin contenido crudo. Sin PII en auditoría. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionquery_idpathYesstring (uuid) Responses StatusDescription200Resultado (LiveQueryOut)defaultError (RFC 9457) (Problem)",{"id":3583,"title":3584,"titles":3585,"content":3586,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#post-knowledgelive-queriesquery_idtest","POST \u002Fknowledge\u002Flive-queries\u002F{query_id}\u002Ftest",[3534],"POST consulta HTTP en vivo (F2-49) Solo sesión owner\u002Fmanager; escrituras con CSRF. API keys sin acceso. HTTPS GET público con IP fijada y validación por salto, 3 s totales, 64 KiB descomprimidos y 2 KiB mapeados. Credenciales cifradas de escritura únicamente. Schema cerrado de hasta 8 parámetros escalares, mapeo declarativo. Máximo 10 consultas; expected_version evita sobrescribir cambios. La baja desactiva y conserva historial. Pruebas aplican cache tenant\u002Fconsulta\u002Fversión\u002Fparámetros, cuotas y circuito como el bot; errores externos son resultado ok=false sin contenido crudo. Sin PII en auditoría. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionquery_idpathYesstring (uuid) Request body (required) application\u002Fjson: LiveQueryTest Responses StatusDescription200Resultado (LiveQueryResult)defaultError (RFC 9457) (Problem)",{"id":3588,"title":3589,"titles":3590,"content":3591,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#post-knowledgesearch","POST \u002Fknowledge\u002Fsearch",[3534],"Buscar en la base de conocimiento (lo mismo que ve el bot) Sesión con cualquier rol, o API key con config:read. Búsqueda semántica; sirve al simulador del panel. Con admisión IA activada puede devolver429 ai_limit_reached\u002Fai_usage_uncertain\u002Fai_busy\u002Fai_request_rate_limited. Authentication: API key or dashboard sessionScopes: config:read Request body (required) application\u002Fjson: KnowledgeSearch Responses StatusDescription200Resultados ordenados por score (array\u003CKnowledgeSearchHit>)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)502Error (RFC 9457) (Problem)503Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3593,"title":3594,"titles":3595,"content":3596,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#get-knowledgesources","GET \u002Fknowledge\u002Fsources",[3534],"Listar las fuentes web de la base de conocimiento Solo sesión (cualquier rol); las API keys no tienen acceso a las fuentes (traen URLs, se mantienen en el panel). Sin paginación (máximo 10 por workspace). Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200Fuentes (array\u003CKnowledgeSource>)defaultError (RFC 9457) (Problem)",{"id":3598,"title":3599,"titles":3600,"content":3601,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#post-knowledgesources","POST \u002Fknowledge\u002Fsources",[3534],"Registrar una página web o un listado como fuente de conocimiento (F2-47, F2-48) Solo sesión owner\u002Fmanager con CSRF. La URL debe ser http(s) pública: se valida contra SSRF (IPs privadas, loopback, link-local\u002Fmetadata, credenciales en la URL, DNS) y vuelve a validarse en cada traída y en cada redirección; 422 unsafe_source_url si no es válida. La URL tampoco puede llevar secretos en el query (?api_key=…, ?token=… y variantes: 422 unsafe_source_url; las credenciales van por fuera de la URL). No hace la traída: queda pending y el worker la importa en su próximo ciclo (≤ 1 min), una sola página, sin JavaScript, respetando robots.txt, solo text\u002Fhtml\u002Ftext\u002Fplain, tope de tamaño. Los ítems importados son de tipo web y el bot los recibe como dato citado no confiable, nunca como instrucción. Tope de 10 fuentes por workspace (409 knowledge_source_limit_reached); URL repetida 409 knowledge_source_duplicate. Auditado. F2-48: kind = csv, json, rss o sheet registra un listado estructurado (misma traída segura, sin robots.txt, tope 2 MiB y 1000 filas) con mapping declarativo y credentials opcionales (cifradas, nunca devueltas); los ítems son de tipo listing. 422 knowledge_invalid_mapping si el mapeo no es válido. kind=site importa una SECCIÓN: url es el prefijo (p. ej. https:\u002F\u002Ffiuit.com\u002Fes\u002Fdocs); el worker lee el sitemap.xml del dominio (y sus índices), toma solo las URLs del mismo host que cuelgan del prefijo (hasta max_pages, 50 por defecto, máx. 200) y trae cada una con la misma traída segura (SSRF, tamaño, tiempo, robots.txt, sin seguir a otros dominios). Cada refresco agrega las páginas nuevas, actualiza las que cambiaron (hash del contenido) y archiva las que desaparecieron. Sin sitemap: last_error=no_sitemap. Authentication: API key or dashboard sessionScopes: None Request body (required) application\u002Fjson: KnowledgeSourceCreate Responses StatusDescription201Fuente creada (status=pending) (KnowledgeSource)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3603,"title":3604,"titles":3605,"content":3606,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#get-knowledgesourcessource_id","GET \u002Fknowledge\u002Fsources\u002F{source_id}",[3534],"Ver una fuente web (estado, último refresco, error legible) Solo sesión (cualquier rol). last_error es un código corto (blocked_address, robots_disallowed, too_large, unsupported_content_type, timeout, empty_content...), nunca el texto de una excepción. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsource_idpathYesstring (uuid) Responses StatusDescription200Fuente (KnowledgeSource)404Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3608,"title":3609,"titles":3610,"content":3611,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#patch-knowledgesourcessource_id","PATCH \u002Fknowledge\u002Fsources\u002F{source_id}",[3534],"Cambiar el intervalo de refresco o pausar\u002Freanudar una fuente Solo sesión owner\u002Fmanager con CSRF. paused=true detiene el refresco (los ítems ya importados siguen disponibles); paused=false la reanuda y la agenda de inmediato. Auditado. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsource_idpathYesstring (uuid) Request body (required) application\u002Fjson: KnowledgeSourceUpdate Responses StatusDescription200Fuente actualizada (KnowledgeSource)404Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3613,"title":3614,"titles":3615,"content":3616,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#delete-knowledgesourcessource_id","DELETE \u002Fknowledge\u002Fsources\u002F{source_id}",[3534],"Borrar una fuente y los ítems que importó Solo sesión owner\u002Fmanager con CSRF. Los ítems manuales no se tocan. Auditado. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsource_idpathYesstring (uuid) Responses StatusDescription204Borrada404Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3618,"title":3619,"titles":3620,"content":3621,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#get-knowledgesourcessource_idpages","GET \u002Fknowledge\u002Fsources\u002F{source_id}\u002Fpages",[3534],"Páginas importadas de una fuente de sección (kind=site) Solo sesión (cualquier rol). Una fila por página con su estado (ok o archived). Vacío para los demás tipos de fuente. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsource_idpathYesstring (uuid) Responses StatusDescription200Páginas (array\u003CKnowledgeSourcePage>)404Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3623,"title":3624,"titles":3625,"content":3626,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#post-knowledgesourcessource_idrefresh","POST \u002Fknowledge\u002Fsources\u002F{source_id}\u002Frefresh",[3534],"Pedir un refresco inmediato de una fuente Solo sesión owner\u002Fmanager con CSRF. Agenda la fuente para el próximo ciclo del worker y reanuda una pausada (reinicia el contador de errores; si la fuente está en error, el contador se conserva para que los reprogramados cortos no reintenten en bucle); la traída no ocurre dentro de la petición. Devuelve 409 knowledge_source_refresh_cooldown si la última traída exitosa fue hace menos de KNOWLEDGE_REFRESH_COOLDOWN_MINUTES (15 por defecto). Sin cambios en el contenido (mismo content_hash) no se vuelven a generar embeddings. Auditado. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsource_idpathYesstring (uuid) Responses StatusDescription202Refresco agendado (KnowledgeSource)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3628,"title":3629,"titles":3630,"content":3631,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fknowledge#post-knowledgesourcespreview","POST \u002Fknowledge\u002Fsources\u002Fpreview",[3534],"Vista previa de un listado, sin guardar (F2-48) Solo sesión owner\u002Fmanager con CSRF. Trae el listado con la misma traída segura que el worker y devuelve las primeras filas ya mapeadas (máx. 10), el total leído y las columnas\u002Fclaves detectadas, para validar el mapeo ANTES de crear la fuente. No guarda nada (ni la fuente ni la credencial) y no devuelve la credencial. Límite: 10 vistas previas por minuto y workspace (429 knowledge_preview_rate_limited). 422 knowledge_listing_failed con reason (código corto: blocked_address, invalid_url, too_large, unsupported_content_type, http_error, timeout, invalid_listing, empty_content, mapping_column_missing, invalid_mapping...) o knowledge_invalid_mapping. Authentication: API key or dashboard sessionScopes: None Request body (required) application\u002Fjson: KnowledgeSourcePreview Responses StatusDescription200Primeras filas mapeadas (KnowledgeSourcePreviewResult)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3633,"title":3634,"titles":3635,"content":3636,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Ftenancy","API · tenancy",[],"tenancy operations in the OpenAPI contract that accept an API key.",{"id":3638,"title":3639,"titles":3640,"content":3641,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ftenancy#patch-workspace","PATCH \u002Fworkspace",[3634],"Editar negocio (owner o manager; requiere X-Csrf-Token) Bearer settings:write admite solo payments_enabled, completion_payment_required, chat_payment, pay_info y brand_accent, sin otros campos; cookie requiere CSRF. Solo owner cambia payments_enabled\u002Fcompletion_payment_required; chat_payment y pay_info requieren workspace:configure y payments:accounts_configure (owner\u002Fmanager). PATCH atómico de identidad, apariencia, contacto, dirección y perfil fiscal. Solo owner modifica fiscal_data\u002Ffiscal_address; manager lee y edita los demás campos. Cambiar currency se rechaza con 409 future_bookings_conflict si existen cobros o valores financieros congelados. Cambiar currency se rechaza con 409 future_bookings_conflict si existen cobros o valores financieros congelados. Cambiar currency se rechaza con 409 future_bookings_conflict si existen cobros o valores financieros congelados. source_plan_id adopta un plan propio de Wagy en la misma transacción (se revalidan estado, expiración, huella y permisos). Timezone\u002Fmoneda con reservas futuras activas devuelve 409 sin cambios parciales. Datos fiscales solo owner\u002Fmanager; staff recibe null. Respuestas no-store; logo thumbnail PNG\u002FJPEG inline menor de 5 MB, sin URL externa. Authentication: API key or dashboard sessionScopes: settings:write Parameters NameInRequiredTypeDescriptionX-Csrf-TokenheaderNostring Request body (required) application\u002Fjson: WorkspaceSettingsPatch Responses StatusDescription200Actualizado (WorkspaceSettings)defaultError (RFC 9457) (Problem)",{"id":3643,"title":3644,"titles":3645,"content":3646,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ftenancy#get-workspaceaudit","GET \u002Fworkspace\u002Faudit",[3634],"Revisar mi configuración (puntaje de puesta a punto) FIU-524. Reglas fijas sobre el proyecto real, sin IA y sin costo: devuelve un puntaje 0-100, solo lo que falta ordenado por impacto y, por cada ítem, la operación de API que lo arregla con sus parámetros sugeridos (fix.operation, fix.params) y, si hace falta un dato del dueño, la pregunta de una línea (fix.ask). Si no falta nada, all_good es true e items va vacío. Owner y manager; API key con config:read. El idioma sale de lang o del proyecto. Sin caché. Authentication: API key or dashboard sessionScopes: config:read Parameters NameInRequiredTypeDescriptionlangqueryNostring pt, es, en Responses StatusDescription200Puntaje y lo que falta; Cache-Control no-store (SetupAudit)defaultError (RFC 9457) (Problem)",{"id":3648,"title":3649,"titles":3650,"content":3651,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ftenancy#get-workspacetrait-catalog","GET \u002Fworkspace\u002Ftrait-catalog",[3634],"Catálogo aprobado completo con versión, cambios y preguntas pt\u002Fes\u002Fen Base versionada más revisiones inmutables aprobadas. API key config:read. No incluye propuestas. Authentication: API key or dashboard sessionScopes: config:read Responses StatusDescription200Catálogo exportable como catalog.json (TraitCatalog)defaultError (RFC 9457) (Problem)",{"id":3653,"title":3654,"titles":3655,"content":3656,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ftenancy#get-workspacetrait-proposals","GET \u002Fworkspace\u002Ftrait-proposals",[3634],"Propuestas y etiquetas propias del proyecto Todos los roles; API key config:read. Hasta 200 por página, orden por UUID; cursor UUID de la última fila. Authentication: API key or dashboard sessionScopes: config:read Parameters NameInRequiredTypeDescriptioncursorqueryNostring (uuid) Responses StatusDescription200Propuestas propias (TraitProposalPage)defaultError (RFC 9457) (Problem)",{"id":3658,"title":3659,"titles":3660,"content":3661,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ftenancy#post-workspacetrait-proposals","POST \u002Fworkspace\u002Ftrait-proposals",[3634],"Proponer un rasgo sin aplicarlo (confirm=true) Permiso workspace:configure; API key settings:write. CSRF para cookie. Máximo 10 pendientes y 3 nuevas por día UTC por negocio; 429 al superar. Deduplicación local por clave o similitud >=0.88 en nombres normalizados pt\u002Fes\u002Fen; devuelve la propuesta existente sin consumir cupo. Una coincidencia en catálogo devuelve 409 trait_already_catalogued. No cambia rasgos, glosario, flujos ni bot. Authentication: API key or dashboard sessionScopes: settings:write Parameters NameInRequiredTypeDescriptionX-Csrf-TokenheaderNostring Request body (required) application\u002Fjson: TraitProposalInput Responses StatusDescription200Propuesta pendiente o duplicado existente (TraitProposal)429Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3663,"title":3664,"titles":3665,"content":3666,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ftenancy#get-workspacetraits","GET \u002Fworkspace\u002Ftraits",[3634],"Rasgos del negocio, etiqueta libre y ejemplos aplicados (todos los roles) F3-407 (ADR 0036). traits son claves del catálogo versionado (catalog_version) en su orden; vacía = todavía no se preguntaron (los proyectos que ya existían arrancan así). business_label es una etiqueta libre de rubro, solo informativa. examples lista los ejemplos compuestos y sus partes. API key config:read. Authentication: API key or dashboard sessionScopes: config:read Responses StatusDescription200OK (TraitsState)defaultError (RFC 9457) (Problem)",{"id":3668,"title":3669,"titles":3670,"content":3671,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ftenancy#put-workspacetraits","PUT \u002Fworkspace\u002Ftraits",[3634],"Guardar rasgos y etiqueta libre (owner o manager; requiere X-Csrf-Token) Reemplaza la lista completa (sin repetir, se guarda en el orden del catálogo) y la etiqueta (hasta 80 caracteres; vacía la borra). Un rasgo fuera del catálogo es 422 unknown_trait con valid_traits; proponer rasgos nuevos es otra operación (F3-565). Inicializa el glosario por rasgos y ejemplo parecido sin otra pregunta; mientras conserve el valor generado, acompaña cambios posteriores. Conserva ediciones propias. No cambia reglas del bot ni de la agenda. Audita workspace.traits_updated. Permiso workspace:configure; API key settings:write. Authentication: API key or dashboard sessionScopes: settings:write Parameters NameInRequiredTypeDescriptionX-Csrf-TokenheaderNostring Request body (required) application\u002Fjson: TraitsInput Responses StatusDescription200Guardado (TraitsState)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3673,"title":3674,"titles":3675,"content":3676,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ftenancy#get-workspacevocabulary","GET \u002Fworkspace\u002Fvocabulary",[3634],"Vocabulario del proyecto (owner o manager) Cómo se nombran Servicio, Tarea, Recurso y Cliente (singular, plural y género por idioma) y, opcionalmente, cada tipo de recurso (kinds, p. ej. «cancha» para las salas de un club). Es presentación; no cambia rutas, tablas ni permisos. Sin vocabulario guardado (is_default) todos los textos son los genéricos de siempre. Authentication: API key or dashboard sessionScopes: config:read Responses StatusDescription200OK (Vocabulary)defaultError (RFC 9457) (Problem)",{"id":3678,"title":3679,"titles":3680,"content":3681,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ftenancy#patch-workspacevocabulary","PATCH \u002Fworkspace\u002Fvocabulary",[3634],"Editar el vocabulario (owner o manager; requiere X-Csrf-Token) Elegir preset sin terms\u002Fkinds descarta esas ediciones; terms y kinds (término por tipo de recurso, FIU-470) reemplazan cada uno sus ediciones anteriores. Términos de 1 a 40 caracteres, sin HTML ni llaves. Escribe auditoría workspace.vocabulary_updated. Authentication: API key or dashboard sessionScopes: settings:write Parameters NameInRequiredTypeDescriptionX-Csrf-TokenheaderYesstring Request body (required) application\u002Fjson: VocabularyPatch Responses StatusDescription200Actualizado (Vocabulary)defaultError (RFC 9457) (Problem)",{"id":3683,"title":3684,"titles":3685,"content":3686,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fsite","API · site",[],"site operations in the OpenAPI contract that accept an API key. «Mi web» (F3-622), la web propia del negocio en su subdominio, apagada hasta que se publica.",{"id":3688,"title":3689,"titles":3690,"content":3691,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsite#get-site","GET \u002Fsite",[3684],"Leer «Mi web» (site:read; API key config:read) La web propia del negocio (F3-622, plan web-del-negocio): plantilla, secciones opcionales marcadas, textos del dueño, subdominio y si está publicada. Sin guardar todavía (exists false) devuelve la propuesta: subdominio sugerido desde el nombre del negocio y libre, plantilla booking, apagada y version 0. Lo que la web muestra del catálogo no se elige acá: es lo que ofrece el bot (ADR 0047, GET \u002Fbot\u002Foffer). Authentication: API key or dashboard sessionScopes: site:read, config:read Responses StatusDescription200«Mi web» (SiteOut)defaultError (RFC 9457) (Problem)",{"id":3693,"title":3694,"titles":3695,"content":3696,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsite#patch-site","PATCH \u002Fsite",[3684],"Cambiar «Mi web» (site:edit; API key config:write) Cambia solo los campos enviados; crea la web (apagada) si todavía no existía. subdomain: de 3 a 40 caracteres a-z, 0-9 y guiones interiores simples, sin nombres reservados (422 site_subdomain_invalid con reason: too_short, too_long, invalid_chars, edge_hyphen, double_hyphen o reserved); si lo usa otro proyecto, 409 site_subdomain_taken. Cambiar el subdominio de una web publicada deja de servir el anterior al instante (sin redirección, ADR 0050 §7). Textos vacíos quedan sin texto (la web usa los datos del negocio). made_with_fiuit: false quita «Hecho con Fiuit» solo si el plan del proyecto lo permite (si no, 409 site_branding_plan_required). Con version distinta de la vigente: 409 site_version_conflict. Audita site.created o site.updated. Authentication: API key or dashboard sessionScopes: config:write Request body (required) application\u002Fjson: SitePatch Responses StatusDescription200«Mi web» después del cambio (SiteOut)defaultError (RFC 9457) (Problem)",{"id":3698,"title":3699,"titles":3700,"content":3701,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsite#post-sitepublish","POST \u002Fsite\u002Fpublish",[3684],"Publicar la web (site:publish; API key config:write) Enciende la web en su subdominio. Idempotente: si ya estaba publicada devuelve lo mismo. Crea la web con la propuesta si todavía no existía. Audita site.published. Con version distinta de la vigente: 409 site_version_conflict. Authentication: API key or dashboard sessionScopes: config:write Request body (optional) application\u002Fjson: SitePublishIn Responses StatusDescription200«Mi web» publicada (SiteOut)defaultError (RFC 9457) (Problem)",{"id":3703,"title":3704,"titles":3705,"content":3706,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fsite#post-siteunpublish","POST \u002Fsite\u002Funpublish",[3684],"Despublicar la web (site:publish; API key config:write) Apaga la web: su subdominio responde 404 enseguida, igual que uno inexistente. Idempotente. Audita site.unpublished. Authentication: API key or dashboard sessionScopes: config:write Request body (optional) application\u002Fjson: SitePublishIn Responses StatusDescription200«Mi web» apagada (SiteOut)defaultError (RFC 9457) (Problem)",{"id":3708,"title":3709,"titles":3710,"content":3711,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fnotifications","API · notifications",[],"notifications operations in the OpenAPI contract that accept an API key. Notificaciones por usuario (F3-88). Campana del panel, reglas del proyecto y SSE propio.",{"id":3713,"title":3714,"titles":3715,"content":3716,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fnotifications#get-notification-rules","GET \u002Fnotification-rules",[3709],"Reglas de notificación del proyecto (F3-88) Solo owner. Quién recibe las alertas de canal caído y de spam, y qué tipos de aviso están apagados para todo el proyecto. Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200OK (NotificationRules)403Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3718,"title":3719,"titles":3720,"content":3721,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fnotifications#put-notification-rules","PUT \u002Fnotification-rules",[3709],"Guardar las reglas de notificación del proyecto Solo owner; cookie y X-Csrf-Token. Escribe audit_log (notification_rules.updated). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionX-Csrf-TokenheaderYesstring Request body (required) application\u002Fjson: NotificationRules Responses StatusDescription200Guardadas (NotificationRules)403Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3723,"title":3724,"titles":3725,"content":3726,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fnotifications#get-notifications","GET \u002Fnotifications",[3709],"Mis notificaciones del proyecto (campana del panel, F3-88) Sesión de panel de cualquier rol del equipo; las API keys reciben 403. Solo las del usuario de la sesión en el proyecto activo (RLS por proyecto y filtro por usuario), de la más nueva a la más vieja. Título y cuerpo ya vienen en el idioma de la persona (sin datos de clientes); link es la ruta del panel de la entidad. locale permite usar el idioma actual del panel; si se omite, usa el idioma de la cuenta. Retención: lo leído 14 días, todo a los 60. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionlocalequeryNostring pt, es, enIdioma actual del panel; por defecto el de la cuenta.limitqueryNointeger default 30unread_onlyqueryNoboolean default falsebeforequeryNostring (date-time)Cursor por fecha de creación. Responses StatusDescription200OK (NotificationList)403Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3728,"title":3729,"titles":3730,"content":3731,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fnotifications#delete-notifications","DELETE \u002Fnotifications",[3709],"Borrar todas mis notificaciones del proyecto (F3-326) Cookie y X-Csrf-Token. Vacía la campana de quien llama en el proyecto activo: usa el usuario y el proyecto de la sesión (nunca un parámetro), así que las de las demás personas y las de otros negocios quedan intactas. No toca la auditoría. Las filas de tipos apagados (in_panel = false), que solo existen para la idempotencia del aviso, se conservan. Idempotente. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionX-Csrf-TokenheaderYesstring Responses StatusDescription204Campana vacía403Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3733,"title":3734,"titles":3735,"content":3736,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fnotifications#post-notificationsidread","POST \u002Fnotifications\u002F{id}\u002Fread",[3709],"Marcar una notificación como leída Cookie y X-Csrf-Token. Idempotente. 404 si no existe o es de otra persona (misma respuesta). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstring (uuid)X-Csrf-TokenheaderYesstring Responses StatusDescription200OK (devuelve el contador de no leídas) (NotificationUnreadCount)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3738,"title":3739,"titles":3740,"content":3741,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fnotifications#post-notificationsread-all","POST \u002Fnotifications\u002Fread-all",[3709],"Marcar todas mis notificaciones como leídas Cookie y X-Csrf-Token. Idempotente. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionX-Csrf-TokenheaderYesstring Responses StatusDescription200OK (NotificationUnreadCount)403Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3743,"title":3744,"titles":3745,"content":3746,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fnotifications#get-notificationsstream","GET \u002Fnotifications\u002Fstream",[3709],"Aviso en vivo de notificaciones nuevas (SSE) text\u002Fevent-stream, propio de la persona y del proyecto. Evento notification.created con {event, id} (sin\ncontenido): el cliente vuelve a pedir el contador y la lista. Un comentario : cada 15 s mantiene la conexión. Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200Stream abierto403Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3748,"title":3749,"titles":3750,"content":3751,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fnotifications#get-notificationsunread-count","GET \u002Fnotifications\u002Funread-count",[3709],"Cantidad de notificaciones sin leer Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200OK (NotificationUnreadCount)403Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3753,"title":3754,"titles":3755,"content":3756,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid","API · prepaid",[],"prepaid operations in the OpenAPI contract that accept an API key. Paquetes y club con cupo (F3-261); el dinero vive en payments.",{"id":3758,"title":3759,"titles":3760,"content":3761,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#post-prepaidbookingsbooking_idrelease","POST \u002Fprepaid\u002Fbookings\u002F{booking_id}\u002Frelease",[3754],"Release Booking Permiso\u002Fscope prepaid:sell (owner\u002Fmanager). Quita el plan de una tarea cubierta: libera la unidad reservada y la tarea vuelve a su valor a cobrar normal; no se vuelve a cubrir sola. Una tarea cubierta no admite cambiar el cliente ni el servicio (PATCH \u002Fbookings\u002F{id} da 409 booking_covered_by_plan) hasta quitarle el plan. Repetirlo es idempotente. Una unidad ya consumida da 409 prepaid.booking_consumed; una tarea sin plan, 409 prepaid.booking_not_covered. Audita prepaid.booking_removed con el motivo. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionbooking_idpathYesstring (uuid) Request body (required) application\u002Fjson: ReleaseBooking Responses StatusDescription200Successful Response (SubscriptionView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3763,"title":3764,"titles":3765,"content":3766,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#get-prepaidcustomerscustomer_id","GET \u002Fprepaid\u002Fcustomers\u002F{customer_id}",[3754],"Customer Plans Permiso\u002Fscope prepaid:read. Paquetes, club y membresía del cliente con su período vigente: unidades totales, usadas, reservadas (tareas confirmadas que lo van a usar) y disponibles (units_left). F3-463: period.booking_id es la cuota del período (la tarea que se cobra), open_fees las cuotas por cobrar y next_due_at el vencimiento de la próxima; status active = al día y past_due = impago, y debt_minor suma las cuotas ya vencidas por cobrar (una que nació antes de vencer todavía no es deuda; con tarjeta: rechazadas por MP o sin cobrar a los 3 días). Staff solo de clientes con tareas en sus recursos; ajeno o inexistente da el mismo 403. Authentication: API key or dashboard sessionScopes: prepaid:read Parameters NameInRequiredTypeDescriptioncustomer_idpathYesstring (uuid) Responses StatusDescription200Successful Response (CustomerPlans)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3768,"title":3769,"titles":3770,"content":3771,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#get-prepaidplans","GET \u002Fprepaid\u002Fplans",[3754],"List Plans Tenant desde credencial. Permiso\u002Fscope prepaid:read (F3-261). Paquetes (N unidades de ciertos servicios con vencimiento en días), planes de club (N unidades por mes calendario local) y membresías (F3-536, precio fijo por mes, sin unidades; units y unit_minor null) del catálogo. active=true lista solo los vendibles. unit_minor = precio \u002F unidades (redondeado hacia abajo), en unidad menor de la moneda. card_billing_available (F3-553) dice si el proyecto puede cobrar con tarjeta (MP Suscripciones), true solo con el cobro automático habilitado y una cuenta de Mercado Pago conectada; recién ahí se crean planes billing=card (club o membresía) y se venden con payer_email. Authentication: API key or dashboard sessionScopes: prepaid:read Parameters NameInRequiredTypeDescriptionactivequeryNoboolean default false Responses StatusDescription200Successful Response (PlanList)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3773,"title":3774,"titles":3775,"content":3776,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#post-prepaidplans","POST \u002Fprepaid\u002Fplans",[3754],"Create Plan Permiso\u002Fscope prepaid:manage (owner\u002Fmanager). Crea un paquete (validity_days obligatorio), un club o una membresía (kind=membership, F3-536: precio fijo por mes sin unidades ni cupo; servicios opcionales, que quedan cubiertos en $0 sin descontar). El cobro con tarjeta (billing=card, MP Suscripciones; solo club y membresía) exige card_billing_available de GET \u002Fprepaid\u002Fplans (F3-553): sin el cobro automático habilitado da 409 prepaid.card_billing_disabled y sin cuenta de Mercado Pago conectada, 409 prepaid.card_account_required. quota: hasta 10 reglas de cupo por día local, opcionalmente en una franja start-end y en ciertos weekdays (0 = lunes); la reserva que no entra en el cupo queda sin cubrir y se cobra normal. Audita prepaid.plan_created. Authentication: API key or dashboard sessionScopes: prepaid:manage Request body (required) application\u002Fjson: PlanInput Responses StatusDescription201Successful Response (PlanView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3778,"title":3779,"titles":3780,"content":3781,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#patch-prepaidplansplan_id","PATCH \u002Fprepaid\u002Fplans\u002F{plan_id}",[3754],"Update Plan Permiso\u002Fscope prepaid:manage. Cambia nombre, servicios, cupo, precio, unidades, vencimiento, flujo del alta o primera cuota completa, o lo apaga (active=false). El precio rige para las cuotas que nacen desde ahora en todas las suscripciones vivas: las cuotas ya creadas conservan el suyo y al cliente no se le avisa (lo ve en su próxima cuota, F3-463); la respuesta trae live_subscriptions, cuántas lo verán. Unidades y vencimiento solo afectan ventas nuevas. Una membresía no acepta unidades, vigencia ni cupo (409 prepaid.membership_terms) y un paquete solo due_rule=signup (409 prepaid.package_terms). Audita prepaid.plan_updated (con el precio antes y después). Authentication: API key or dashboard sessionScopes: prepaid:manage Parameters NameInRequiredTypeDescriptionplan_idpathYesstring (uuid) Request body (required) application\u002Fjson: PlanUpdate Responses StatusDescription200Successful Response (PlanView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3783,"title":3784,"titles":3785,"content":3786,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#get-prepaidplansplan_idperformance","GET \u002Fprepaid\u002Fplans\u002F{plan_id}\u002Fperformance",[3754],"Rendimiento de un plan en cantidades: vendidos por día, semana o mes y activos hoy F3-328. Rendimiento de un plan (paquete o club) en CANTIDADES (nunca dinero: vive en Financiero). Panel: permisos performance:read y prepaid:stats (owner\u002Fmanager); API key: scope prepaid:read. sold (por defecto): ventas nuevas por día de alta, sin pendientes de pago ni clientes de prueba, con el período anterior. active: clientes distintos con el plan activo hoy (previous null). Período anterior y tramos como en GET \u002Fservices\u002F{id}\u002Fperformance. Máximo 366 días. Authentication: API key or dashboard sessionScopes: performance:read, prepaid:read Parameters NameInRequiredTypeDescriptionplan_idpathYesstring (uuid)fromqueryYesstring (date)Primer día local del negocio (incluido)toqueryYesstring (date)Último día local del negocio (incluido)granularityqueryNostring day, week, month default dayTramo de la serie: day, week (lunes) o month Responses StatusDescription200Successful Response (ItemPerformanceOut)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":3788,"title":3789,"titles":3790,"content":3791,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#get-prepaidplansstats","GET \u002Fprepaid\u002Fplans\u002Fstats",[3754],"Rendimiento por plan: vendidos, activos, consumo y vencimientos F3-315. Rendimiento de cada plan del catálogo (también los sin ventas), en una sola consulta agrupada. Panel: permiso prepaid:stats (owner\u002Fmanager); API key: scope prepaid:read. Sin clientes de prueba. sold: ventas nuevas del período (sin pendientes de pago con tarjeta). active_subscriptions: con el plan activo hoy. units_used\u002Funits_total\u002Fusage_ratio: consumo de los períodos vigentes hoy de clientes con el plan. expiring_30d: paquetes vigentes que vencen en 30 días (null en club). sold_minor (ventas y renovaciones pagas del período, incluye reembolsadas como el resumen de Financiero) y currency solo con finance:analyze; si no, null. Máximo 366 días. Authentication: API key or dashboard sessionScopes: prepaid:read Parameters NameInRequiredTypeDescriptionfromqueryYesstring (date)Primer día local del negocio (incluido)toqueryYesstring (date)Último día local del negocio (incluido) Responses StatusDescription200Successful Response (PlanStatsList)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)",{"id":3793,"title":3794,"titles":3795,"content":3796,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#get-prepaidsubscriptions","GET \u002Fprepaid\u002Fsubscriptions",[3754],"Listar suscripciones del proyecto Permiso\u002Fscope prepaid:benefits (owner\u002Fmanager). Lista paginada de suscripciones con estado impago y pausa de beneficios; las membresías traen standing (al día, en gracia o bloqueada, F3-537). Con unpaid=true, solo las impagas (la alerta de Hoy y el filtro «Impagos» de Planes). Cada una trae months_due (meses adeudados) y la respuesta unpaid_count, el conteo del servidor de impagas del proyecto (F3-405). Tenant desde la credencial. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionlimitqueryNointeger default 100offsetqueryNointeger default 0unpaidqueryNoboolean default falseF3-537: solo las impagas (alerta de Hoy), con customer_name; primero las membresías bloqueadas, después las de gracia más corta y el club impago al final. Sin clientes de prueba. Responses StatusDescription200Successful Response (SubscriptionList)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3798,"title":3799,"titles":3800,"content":3801,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#post-prepaidsubscriptions","POST \u002Fprepaid\u002Fsubscriptions",[3754],"Sell Plan Permiso\u002Fscope prepaid:sell (owner\u002Fmanager) y además payments:record: vende un plan. Crea la suscripción, su período 1 y la cuota 1 (F3-463): una tarea sin servicio (subject.type = subscription), en cola y sin horario, que es también el alta (recorre el flujo del plan, flow_id, si tiene) y vence al venderse; su valor es el precio vigente del plan, o la parte proporcional hasta el próximo vencimiento según due_rule (salvo first_fee_full). Con payment registra un recibo purpose=plan sobre esa cuota (cualquier forma de pago manual, misma caja e idempotencia que POST \u002Fpayments\u002Fmanual) y nace pagada; sin payment queda Por cobrar (link de pago desde la tarea o recibo a mano) y es deuda desde ya. Cubre enseguida las tareas confirmadas del cliente dentro de la ventana. Si se vende dentro de los notice_days previos al próximo vencimiento, la cuota 2 nace en el acto. En un flujo de cuota la tarea solo pasa a Pagada con saldo cero: completarla con deuda o pago parcial da 409 prepaid_consumption_failed (reason: membership_unpaid), y anular su recibo o devolver el cobro la vuelve a Por cobrar. El cobro automático aparece en el historial de la tarea; devolverlo desde Fiuit da payment.refund_plan_unsupported (se devuelve en Mercado Pago). Con tarjeta (F3-553; plan billing=card, payer_email = email del cliente; basta prepaid:sell, no registra un recibo) la suscripción nace pending con checkout_url, el link de Mercado Pago donde el cliente autoriza la tarjeta (Fiuit no ve sus datos); al autorizar y cobrarse el primer mes pasa a active. Exige card_billing_available: si no, 409 prepaid.card_billing_disabled o prepaid.card_account_required. Una sola venta con tarjeta vigente por cliente y plan (F3-631): si el cliente ya tiene ese plan con tarjeta esperando autorización (pending), activo o con un cobro rechazado (past_due), responde 409 con code: prepaid_card_sale_exists, detail: prepaid.card_sale_exists y subscription_id (la venta vigente), sin tocar Mercado Pago; cancelada o vencida no bloquea. Idempotency-Key obligatoria (reintentar con la misma clave devuelve la misma venta): la misma clave con otros datos es 409. Las escrituras de dinero desde MCP exigen confirm=true. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionIdempotency-KeyheaderYesstring Request body (required) application\u002Fjson: SellPlan Responses StatusDescription201Successful Response (SubscriptionView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3803,"title":3804,"titles":3805,"content":3806,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#put-prepaidsubscriptionssubscription_idbenefits","PUT \u002Fprepaid\u002Fsubscriptions\u002F{subscription_id}\u002Fbenefits",[3754],"Pausar o reactivar beneficios Permiso\u002Fscope prepaid:benefits (owner\u002Fmanager). paused=true exige club past_due; paused=false reactiva un club activo o impago. No cambia deuda ni cobra. Idempotente por estado y auditado. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsubscription_idpathYesstring (uuid) Request body (required) application\u002Fjson: BenefitsUpdate Responses StatusDescription200Successful Response (SubscriptionView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3808,"title":3809,"titles":3810,"content":3811,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#post-prepaidsubscriptionssubscription_idcancel","POST \u002Fprepaid\u002Fsubscriptions\u002F{subscription_id}\u002Fcancel",[3754],"Cancel Plan Permiso\u002Fscope prepaid:sell; con refund=true también payments:void y payments:record. Cancela con la regla única de ADR 0040 §5.5 (F3-463): no nacen más cuotas y las ya creadas no se tocan (una por cobrar sigue siendo deuda real; se perdona cerrándola sin completar); la respuesta las lista en open_fees. Libera las unidades reservadas por tareas futuras (vuelven a su valor normal). Con refund=true en un paquete o club cobrado en mano, anula los recibos de la cuota del período vigente (abierto y sin vencer) y deja su valor a cobrar en lo ya consumido, cobrado con un recibo nuevo del mismo medio; lo vencido se pierde y no se devuelve. Un recibo que también paga otras tareas da 409 prepaid.refund_shared_receipt y dinero electrónico 409 prepaid.refund_electronic_unsupported (se devuelve desde la tarea); efectivo de un día con caja cerrada, 409 prepaid.refund_cash_closed. Repetir con el mismo motivo es idempotente. Con tarjeta cancela también la suscripción en MP. Membresía con refund=true: 409 prepaid.membership_refund_on_task (lo cobrado se devuelve desde la tarea). Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsubscription_idpathYesstring (uuid)Idempotency-KeyheaderYesstring Request body (required) application\u002Fjson: CancelPlan Responses StatusDescription200Successful Response (SubscriptionView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3813,"title":3814,"titles":3815,"content":3816,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#post-prepaidsubscriptionssubscription_idextend","POST \u002Fprepaid\u002Fsubscriptions\u002F{subscription_id}\u002Fextend",[3754],"Extend Plan Permiso\u002Fscope prepaid:sell (owner\u002Fmanager). Extiende a mano el vencimiento del período vigente de un paquete o club (o del último período de un paquete ya vencido, que vuelve a quedar activo y cubre las tareas confirmadas dentro de la ventana). Al vencer, las unidades no usadas se pierden: no hay crédito ni reembolso del remanente; esta es la única forma de darle más tiempo. ends_at debe ser posterior al vencimiento actual y al momento presente (409 prepaid.extend_not_later); repetir el mismo ends_at no cambia nada. Se extiende el período ya empezado (una cuota siguiente que nació antes de vencer no). Una membresía o un plan cancelado da 409 prepaid.not_extendable. Audita prepaid.period_extended con antes, después y motivo. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionsubscription_idpathYesstring (uuid) Request body (required) application\u002Fjson: ExtendPlan Responses StatusDescription200Successful Response (SubscriptionView)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3818,"title":3819,"titles":3820,"content":3821,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fprepaid#get-prepaidsummary","GET \u002Fprepaid\u002Fsummary",[3754],"Summary Permiso\u002Fscope finance:analyze (owner\u002Fmanager). Ingreso de paquetes y club, sin clientes de prueba: sold_minor (cobrado), consumed_minor (unidades usadas, ingreso reconocido), deferred_minor (unidades por usar de períodos vigentes), expired_minor (no usadas de períodos cerrados o cancelados), refunded_minor y debt_minor (meses de club sin cobrar). Authentication: API key or dashboard sessionScopes: None Responses StatusDescription200Successful Response (PrepaidSummary)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)409Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)",{"id":3823,"title":3824,"titles":3825,"content":3826,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fattachments","API · attachments",[],"attachments operations in the OpenAPI contract that accept an API key.",{"id":3828,"title":3829,"titles":3830,"content":3831,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fattachments#get-bookingsidattachments","GET \u002Fbookings\u002F{id}\u002Fattachments",[3824],"— Adjuntos vigentes del tenant activo y sus recursos autorizados; URLs relativas firmadas ≤300s también exigen la credencial vigente. Nunca storage_key, nombre del cliente ni URL externa. Viewer solo lee. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstringlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200Adjuntos más recientes primero (object)defaultError (RFC 9457) (Problem)",{"id":3833,"title":3834,"titles":3835,"content":3836,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fattachments#get-bookingsidattachmentsattachment_id","GET \u002Fbookings\u002F{id}\u002Fattachments\u002F{attachment_id}",[3824],"Leer metadatos privados de una evidencia Scope bookings:read para API keys; tenant y recurso autorizados, misma reserva, evidencia vigente no borrada. Devuelve una nueva URL firmada ligada al actor que también exige credencial vigente; la firma sola nunca autoriza. Sin storage_key ni contenido. Authentication: API key or dashboard sessionScopes: bookings:read Parameters NameInRequiredTypeDescriptionidpathYesstringattachment_idpathYesstring (uuid) Responses StatusDescription200Metadatos para mostrar una referencia UUID del formulario (Attachment)404Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":3838,"title":3839,"titles":3840,"content":3841,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fattachments#get-bookingsidattachmentsattachment_iddownload","GET \u002Fbookings\u002F{id}\u002Fattachments\u002F{attachment_id}\u002Fdownload",[3824],"— Firma ligada al tenant, actor, adjunto y plazo; se revalida credencial\u002Frol\u002Frecurso y retención. Attachment disposition, nosniff, no-store; no redirects ni URLs de terceros. La firma sola no autoriza. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstringattachment_idpathYesstring (uuid)expiresqueryYesintegersignaturequeryYesstring Responses StatusDescription200Blob verificado (string)defaultError (RFC 9457) (Problem)",{"id":3843,"title":3844,"titles":3845,"content":3846,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fattachments#get-bookingsidlocation-events","GET \u002Fbookings\u002F{id}\u002Flocation-events",[3824],"— Capturas puntuales vigentes; mismas restricciones de tenant y recurso de la reserva. No rastreo continuo. También figuran en timeline; nunca se incluyen coordenadas en audit ni stage-history. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionidpathYesstringlimitqueryNointeger default 25cursorqueryNostring Responses StatusDescription200Capturas más recientes primero (object)defaultError (RFC 9457) (Problem)",{"id":3848,"title":3849,"titles":3850,"content":3851,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fbot","API · bot",[],"bot operations in the OpenAPI contract that accept an API key.",{"id":3853,"title":3854,"titles":3855,"content":3856,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbot#get-bot","GET \u002Fbot",[3849],"Personalidad vigente (owner\u002Fmanager) Authentication: API key or dashboard sessionScopes: config:read Responses StatusDescription200Configuración; sin fila devuelve defaults y versión 0 (BotConfig)defaultError (RFC 9457) (Problem)",{"id":3858,"title":3859,"titles":3860,"content":3861,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbot#put-bot","PUT \u002Fbot",[3849],"Guardar personalidad versionada (owner\u002Fmanager, CSRF) version opcional permite control optimista (409 bot_version_conflict). Texto del dueño es una preferencia no confiable; nunca cambia reglas, tools ni datos críticos. Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionX-Csrf-TokenheaderYesstring Request body (required) application\u002Fjson: BotConfig Responses StatusDescription200Guardado (BotConfig)defaultError (RFC 9457) (Problem)",{"id":3863,"title":3864,"titles":3865,"content":3866,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbot#get-botchannel-policies","GET \u002Fbot\u002Fchannel-policies",[3849],"Política del bot por canal (owner\u002Fmanager) Una entrada por canal (webchat, whatsapp); sin fila guardada devuelve los defaults del canal con is_default=true y versión 0. Authentication: API key or dashboard sessionScopes: config:read Responses StatusDescription200Políticas vigentes (object)defaultError (RFC 9457) (Problem)",{"id":3868,"title":3869,"titles":3870,"content":3871,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbot#put-botchannel-policieschannel","PUT \u002Fbot\u002Fchannel-policies\u002F{channel}",[3849],"Guardar la política de un canal (owner\u002Fmanager, CSRF) version opcional para control optimista (409 channel_policy_version_conflict). contact_gate distinto de never exige required_contact y solo existe en canales con formulario (webchat; 422 en los demás). unknown_contact_policy = filtered no existe en webchat (422 policy_not_available_for_channel). contact_gate_turns solo aplica a after_turns y no puede superar max_bot_turns. Modo de atención (ADR 0056): attention_mode = by_schedule da 422 attention_mode_not_available hasta que existan las franjas. Los textos libres son preferencias no confiables. Auditado (bot.channel_policy_updated, sin copiar el texto). Authentication: API key or dashboard sessionScopes: config:write Parameters NameInRequiredTypeDescriptionchannelpathYesstring webchat, whatsapp, telegram, instagramX-Csrf-TokenheaderYesstring Request body (required) application\u002Fjson: ChannelPolicyIn Responses StatusDescription200Guardada (ChannelPolicy)defaultError (RFC 9457) (Problem)",{"id":3873,"title":3874,"titles":3875,"content":3876,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbot#get-botconversationsconversation_idpath","GET \u002Fbot\u002Fconversations\u002F{conversation_id}\u002Fpath",[3849],"Recorrido de una conversación por el árbol de atención (flows:read; API key config:read) Cada tramo de la conversación del bot de clientes (ADR 0040 §4.4, F3-724): por qué rama pasó (y la sub-salida, si el ítem siguió un flujo distinto del habitual) y dónde se cortó: task_created (con el id de la tarea), answered, handoff, abandoned (con el último paso que el bot pidió, p. ej. destination), expired o in_progress. Del tramo más viejo al más nuevo (los últimos 50). Los nombres salen del árbol de hoy. Sin texto del cliente ni datos personales. 404 si la conversación no es de este proyecto. Authentication: API key or dashboard sessionScopes: flows:read, config:read Parameters NameInRequiredTypeDescriptionconversation_idpathYesstring (uuid) Responses StatusDescription200El recorrido de la conversación (BotConversationPath)defaultError (RFC 9457) (Problem)",{"id":3878,"title":3879,"titles":3880,"content":3881,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbot#get-botoffer","GET \u002Fbot\u002Foffer",[3849],"Qué ofrece el bot por chat hoy (bot:read; API key config:read) La misma regla que usa el bot (ADR 0047): tipo habilitado en «Qué vende el bot» (sells), ítem con bot_offered y activo; nunca el servicio de sistema de la membresía. Sin cliente ni conversación: no aplica la cobertura por zona del cliente. Sin flow_id\u002Fstage tampoco aplica la etapa del flujo (narrowed_by null). Con flow_id y stage (juntos; uno solo da 422 bot_offer_stage_incomplete) devuelve lo que el bot ofrecería a un cliente con su tarea en esa etapa: el bot_offers de la versión vigente del flujo, con la misma regla que la conversación (solo achica; narrowed_by null si la etapa hereda). Flujo que no es del proyecto o etapa que no está en su versión vigente: 404 (service_stages_not_found, detalle flow_not_found o stage_not_found). stages lista las etapas de los flujos activos cuyo bot_offers achica la lista (vacío: ninguna). Productos: hasta 500 por modalidad de pedido, en el orden del catálogo. Authentication: API key or dashboard sessionScopes: bot:read, config:read Parameters NameInRequiredTypeDescriptionflow_idqueryNostring (uuid)Flujo de la etapa a previsualizar (con stage).stagequeryNostringClave de la etapa en la versión vigente del flujo (con flow_id). Responses StatusDescription200Lo que el bot ofrece, por tipo (BotOffer)defaultError (RFC 9457) (Problem)",{"id":3883,"title":3884,"titles":3885,"content":3886,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbot#get-bottree","GET \u002Fbot\u002Ftree",[3849],"Árbol de atención del bot (bot:read; API key config:read) La raíz «Atención del bot» y un nivel de ramas (ADR 0040 §4.4, F3-723), calculadas del catálogo, de «Qué vende el bot» (sells), de la base de conocimiento y de los flujos; no se guarda nada. Ramas estándar: services, products, subscriptions (aparecen solas si el negocio tiene algo para ofrecer), faq (si la base de conocimiento tiene algún ítem activo), mine y handoff (siempre); y una rama flow:\u003Cid> por cada flujo por intención activo. Las ramas de catálogo salen de la misma regla del bot (ADR 0047) sin el nivel de «Qué vende el bot», así que una rama pausada se sigue viendo (paused: true). La pausa de services, products y subscriptions es sells (bookings, orders, plans): se escribe con PUT \u002Fbot (permiso bot:configure), el mismo campo que «Qué vende el bot». Una rama propia se pausa con customer_can_start de su flujo. faq, mine y handoff no se pausan (pausable false). exit es la tarea que crea la rama y su flujo (faq, mine y handoff: null); sub_exits, los ítems con un flujo distinto del habitual; sources, de dónde salen los productos (una integración es fuente, no rama). El orden es el que guardó el dueño en la raíz (order, F3-467; PATCH \u002Fflows\u002F{flow_id} con flows:write) o, sin él, el de §4.4; una rama que aparece después entra en su lugar por defecto. El bot usa este mismo orden, sin las pausadas, para la bienvenida, el menú sin IA, la lista cerrada de la elección y customer.offer. Authentication: API key or dashboard sessionScopes: bot:read, config:read, flows:write Responses StatusDescription200El árbol de atención (BotTree)defaultError (RFC 9457) (Problem)",{"id":3888,"title":3889,"titles":3890,"content":3891,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fbot#get-bottreefunnel","GET \u002Fbot\u002Ftree\u002Ffunnel",[3849],"Embudo de cada rama del árbol de atención (flows:read; API key config:read) Recorrido de las conversaciones por el árbol de atención (ADR 0040 §4.4, «Recorrido de cada conversación», F3-724), por rama, en los últimos days días locales del proyecto (hoy incluido): cuántos tramos entraron, crearon tarea (task_created), se respondieron sin tarea (answered), derivaron a una persona (handoff), se abandonaron (abandoned; también un tramo quieto más de 30 minutos), vencieron (expired, el TTL de la corrida) o siguen en curso, y en qué paso se cortaron los abandonados y vencidos (cuts). Sin pruebas (simulador y clientes de prueba), con el mismo criterio de días que el uso de flujos. Solo vienen las ramas con algún tramo; root cuenta los que no eligieron rama. Sin texto del cliente ni datos personales. Permiso flows:read (owner y manager) mientras no exista el de uso de flujos. Authentication: API key or dashboard sessionScopes: flows:read, config:read Parameters NameInRequiredTypeDescriptiondaysqueryNointeger default 7 Responses StatusDescription200El embudo por rama (BotTreeFunnel)defaultError (RFC 9457) (Problem)",{"id":3893,"title":3894,"titles":3895,"content":3896,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Ffeedback","API · feedback",[],"feedback operations in the OpenAPI contract that accept an API key.",{"id":3898,"title":3899,"titles":3900,"content":3901,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ffeedback#get-feedbackkindidentifier","GET \u002Ffeedback\u002F{kind}\u002F{identifier}",[3894],"Consultar evaluación Tenant desde credencial. Owner configura\u002Frevoca; owner\u002Fmanager consultan todas las entidades; staff solo tareas\u002Frecursos propios. Scopes config:read para GET settings, settings:write para PUT\u002FDELETE y bookings:read para indicadores. API keys no leen comentarios privados. Una puntuación baja agrega la etiqueta revisar-evaluacion (requiere revisión en Hoy) y emite feedback_low para owner\u002Fmanager; canales por defecto panel\u002Fpush\u002FTelegram\u002Femail, con preferencias y silencio. Promedio desde 3 respuestas como mínimo, escala 0-100; tendencia compara 30 días con los 30 anteriores. Authentication: API keyScopes: config:read, settings:write, bookings:read Parameters NameInRequiredTypeDescriptionkindpathYesstring booking, service, customer, resourceidentifierpathYesstring (uuid) Responses StatusDescription200Successful Response (FeedbackSummary)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)413Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)503Error (RFC 9457) (Problem)",{"id":3903,"title":3904,"titles":3905,"content":3906,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ffeedback#delete-feedbackbookingidentifier","DELETE \u002Ffeedback\u002Fbooking\u002F{identifier}",[3894],"Revocar enlace de evaluación Tenant desde credencial. Owner configura\u002Frevoca; owner\u002Fmanager consultan todas las entidades; staff solo tareas\u002Frecursos propios. Scopes config:read para GET settings, settings:write para PUT\u002FDELETE y bookings:read para indicadores. API keys no leen comentarios privados. Una puntuación baja agrega la etiqueta revisar-evaluacion (requiere revisión en Hoy) y emite feedback_low para owner\u002Fmanager; canales por defecto panel\u002Fpush\u002FTelegram\u002Femail, con preferencias y silencio. Promedio desde 3 respuestas como mínimo, escala 0-100; tendencia compara 30 días con los 30 anteriores. Authentication: API keyScopes: config:read, settings:write, bookings:read Parameters NameInRequiredTypeDescriptionidentifierpathYesstring (uuid) Responses StatusDescription204Operación realizada400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)413Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)503Error (RFC 9457) (Problem)",{"id":3908,"title":3909,"titles":3910,"content":3911,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ffeedback#get-feedbacksettings","GET \u002Ffeedback\u002Fsettings",[3894],"Consultar evaluación Tenant desde credencial. Owner configura\u002Frevoca; owner\u002Fmanager consultan todas las entidades; staff solo tareas\u002Frecursos propios. Scopes config:read para GET settings, settings:write para PUT\u002FDELETE y bookings:read para indicadores. API keys no leen comentarios privados. Una puntuación baja agrega la etiqueta revisar-evaluacion (requiere revisión en Hoy) y emite feedback_low para owner\u002Fmanager; canales por defecto panel\u002Fpush\u002FTelegram\u002Femail, con preferencias y silencio. Promedio desde 3 respuestas como mínimo, escala 0-100; tendencia compara 30 días con los 30 anteriores. Authentication: API keyScopes: config:read, settings:write, bookings:read Responses StatusDescription200Successful Response (FeedbackSettings)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)413Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)503Error (RFC 9457) (Problem)",{"id":3913,"title":3914,"titles":3915,"content":3916,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Ffeedback#put-feedbacksettings","PUT \u002Ffeedback\u002Fsettings",[3894],"Configurar evaluaciones (owner) Tenant desde credencial. Owner configura\u002Frevoca; owner\u002Fmanager consultan todas las entidades; staff solo tareas\u002Frecursos propios. Scopes config:read para GET settings, settings:write para PUT\u002FDELETE y bookings:read para indicadores. API keys no leen comentarios privados. Una puntuación baja agrega la etiqueta revisar-evaluacion (requiere revisión en Hoy) y emite feedback_low para owner\u002Fmanager; canales por defecto panel\u002Fpush\u002FTelegram\u002Femail, con preferencias y silencio. Promedio desde 3 respuestas como mínimo, escala 0-100; tendencia compara 30 días con los 30 anteriores. Authentication: API keyScopes: config:read, settings:write, bookings:read Request body (required) application\u002Fjson: FeedbackSettings Responses StatusDescription200Successful Response (FeedbackSettings)400Error (RFC 9457) (Problem)401Error (RFC 9457) (Problem)403Error (RFC 9457) (Problem)404Error (RFC 9457) (Problem)413Error (RFC 9457) (Problem)422Error (RFC 9457) (Problem)429Error (RFC 9457) (Problem)503Error (RFC 9457) (Problem)",{"id":3918,"title":3919,"titles":3920,"content":3921,"level":257},"\u002Fdocs\u002Fapi\u002Freference\u002Fhelp","API · help",[],"help operations in the OpenAPI contract that accept an API key.",{"id":3923,"title":3924,"titles":3925,"content":3926,"level":263},"\u002Fdocs\u002Fapi\u002Freference\u002Fhelp#get-helpsearch","GET \u002Fhelp\u002Fsearch",[3919],"Buscar en la ayuda de Fiuit (guías, «¿Qué pasa si…?» y políticas de producto) FIU-397. La misma búsqueda que usa Wagy: guías de uso del sitio, preguntas frecuentes y el registro de políticas de producto, para que cualquier IA conectada entienda cómo funciona Fiuit. No lee datos del negocio. Sesión con cualquier rol o cualquier API key. Con API key solo salen las políticas vigentes (available=true). documented=false: la ayuda no lo cubre; no inventar pasos ni reglas. Authentication: API key or dashboard sessionScopes: None Parameters NameInRequiredTypeDescriptionqqueryYesstringLa pregunta con sus palabras (incluir «cómo» si es cómo hacer algo).localequeryNostring pt, es, enIdioma de las guías y respuestas; sin él, el del proyecto.limitqueryNointeger default 4 Responses StatusDescription200Secciones de guía, preguntas frecuentes y políticas que responden la consulta (HelpSearchResult)422Error (RFC 9457) (Problem)defaultError (RFC 9457) (Problem)",{"id":214,"title":213,"titles":3928,"content":3929,"level":257},[],"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 hosted server is https:\u002F\u002Fmcp.fiuit.com\u002F (https:\u002F\u002Fmcp.fiuit.com\u002Fmcp is the same address). To connect Claude or ChatGPT with one button, without copying keys, follow Connect Fiuit to your AI. What follows is for connecting it with an API key or running it yourself.",{"id":3931,"title":3932,"titles":3933,"content":3934,"level":263},"\u002Fdocs\u002Fmcp#partner-material","Partner material",[213],"The partner toolset includes partner_courses, partner_kit and partner_news: reviewed courses, messages and templates with your referral link, and updates ready to share. All three tools are read-only, accept lang (pt, es or en) and only appear with the partner:read scope. They work with an API key or OAuth connection. They read the partner of the person who created the key or authorized the connection, while that person remains an active project member. If no courses have been reviewed yet, the list is empty; progress stays in the browser and cannot be read through MCP.",{"id":3936,"title":3937,"titles":3938,"content":3939,"level":263},"\u002Fdocs\u002Fmcp#run-the-server","Run the server",[213],"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, partner and setup (rarely used configuration: services, resources, schedules, flows, automations, website, store, zones and payment accounts). Default: all nine; without setup the list drops to about 130 toolsMCP_HOST, MCP_PORTWhere it listens (default 127.0.0.1:8700)MCP_ALLOWED_HOSTSAllowed hosts (DNS rebinding protection)",{"id":3941,"title":3942,"titles":3943,"content":3944,"level":263},"\u002Fdocs\u002Fmcp#connect-a-client","Connect a client",[213],"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":3946,"title":3947,"titles":3948,"content":3949,"level":263},"\u002Fdocs\u002Fmcp#public-mcp-for-your-customers-ai-assistants","Public MCP for your customers' AI assistants",[213],"Besides the business MCP (with a key), Fiuit publishes a keyless MCP for people's AI assistants (ChatGPT, Claude, Gemini and others): https:\u002F\u002Fmcp.fiuit.com\u002Fclientes. With it, an assistant can find your business, see what your bot offers and request a booking for a real person. claude mcp add --transport http fiuit-customers https:\u002F\u002Fmcp.fiuit.com\u002Fclientes ToolWhat it doesfind_businessSearches by exact name or subdomain, or by directory text («padel Uruguaiana»). Up to 10 results per page and 3 pages, in neutral order: distance, a free slot that day and open now.list_offerWhat the bot offers, with prices already formatted.find_slotsFree times for a service.quote_orderQuotes a product order: each line with its price and the total, already formatted. It only quotes (it holds or orders nothing); to change the cart, quote again. Only at businesses that have it enabled.my_assetsThe person's assets (their vehicle), only in a verified chat. It only reads: to save or fix one, the person tells the business through talk_to_business. Only types the business already turned on. Only at businesses that have it enabled.request_bookingHolds the time for a few minutes and sends the person a code by WhatsApp (default), Telegram or email.confirm_bookingConfirms with the code the person received. Without the code, the time is released on its own.talk_to_businessTalks to the business bot, like on WhatsApp. Returns conversation to continue the chat and the reply with amounts and dates already formatted.end_conversationEnds the chat before it expires, if the person asks: anything after starts without their data.search_knowledgeAnswers questions about your business with what your knowledge base says.handoffHands the chat to someone on your team when the customer asks.request_taskRequests a service without a time slot (an assessment, a quote) for the person, only after they confirmed a code in the chat.my_bookingsShows the person's open bookings and orders, only after they confirmed a code in the chat.cancel_booking, reschedule_bookingAsk to cancel or move one of the person's bookings: a new code is sent and only that code makes it happen. The assistant never confirms on its own: the code the person receives is always required. Only businesses with a published website and «Accept AI agents» on show up; the directory also requires «Show in the Fiuit directory». Both are on by default and change with update_site (accept_agents, in_directory), through the API (PATCH \u002Fv1\u002Fsite) or by asking Wagy. Products and plans are ordered through the business website. The same routes are in the API without credentials: \u002Fv1\u002Fpublic\u002Fagents\u002F*. Talking to the bot (talk_to_business). The same bot as on WhatsApp answers, with your rules: what it sells, stages, handoff to a person, tone and greeting. The chat shows up in the Inbox marked «Via AI» and your team can take it over; if they do, the assistant reads the person's reply. To hold a time the assistant must send the person's name and phone (or email): the «yes» to the summary doesn't confirm, the person receives a code and the booking is made only with confirm_booking. Until the person confirms a code in the chat, requests without a time, cancelling or rescheduling can't be done from an assistant. Each chat uses AI usage from your plan, like any channel. API routes: POST \u002Fv1\u002Fpublic\u002Fagents\u002Fbusinesses\u002F{business}\u002Fconversations and ...\u002Fconversations\u002F{conversation_id}\u002Fmessages (POST to send, GET to read, with optional wait). Verified session. When the person confirms the code of a booking requested in the chat, the chat isn't cut off: it continues for 24 hours on their record (verified_until). The bot greets them by name and knows their bookings, orders and plans (debt, only the total). Booking or ordering again with nothing to pay needs no other code; cancelling, rescheduling and paying need a new one each time, sent to the contact the person confirmed and used in confirm_booking. Chatting doesn't renew the 24 hours: only another confirmed code does. After that, or in a new chat, the assistant starts without the person's data; with end_conversation (DELETE ...\u002Fconversations\u002F{conversation_id}) the person ends it earlier.",{"id":3951,"title":3952,"titles":3953,"content":3954,"level":263},"\u002Fdocs\u002Fmcp#tools","Tools",[213],"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. Every tool carries its MCP annotations: readOnlyHint (only reads), destructiveHint (cancels, deletes, voids or refunds), idempotentHint and openWorldHint (messages a customer, charges through a provider or publishes on the internet). That way ChatGPT and Claude know what they can use without asking for confirmation. On connect, the server introduces itself as Fiuit and tells the model where to start (list_today, list_tasks, list_conversations). 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 dates or for one opening day (day, includes its night after 00:00)hold_slotbookings:write10-minute holdconfirm_bookingbookings:writeConfirms a hold with the customer's datacancel_bookingbookings:writeCancels a booking. Requires confirm=true: without it, it only shows the booking and does not cancelreschedule_bookingbookings:writeMoves an existing booking to another timeget_bookingbookings:readBooking detail Administration (admin): so the Owner can run the business from their AI assistant. ToolScopeDoeslist_resourcesconfig:readTeam, rooms, machines and teams, with their icon and color if setlist_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 decidelist_service_pausesconfig:readLists a service's pauses by datepause_serviceconfig:writePauses a service from one date to another (inclusive) without blocking the resources that provide it: their other services keep being offeredresume_serviceconfig:writeReopens a service paused over a date rangecreate_service, update_serviceconfig:writeCreates or changes a service, with its booking formupdate_scheduleconfig:writeChanges the weekly schedule or the time zonelist_booking_series, get_booking_seriesbookings:readRecurring bookings («every Tuesday at 8 pm») and their dates: with a task, skipped or in conflictcreate_booking_seriesbookings:writeCreates a recurring booking: same service and customer every 1 to 4 weeks, on one or more days, until a date (up to one year) or a number of times (up to 52). Each date is a normal task charged on that day. Without confirm=true it returns the preview (dates for the next 8 weeks and which ones conflict); conflicting dates are skipped with skip_dates or skip_conflictsupdate_booking_series, cancel_booking_seriesbookings:writeEdits or cancels the whole series or, with from_date, «this and following». Future dates not started or paid are rebuilt (or cancelled without notice); past or paid ones are untouched. «Only this one» is reschedule_booking or cancel_booking on that task. Require confirm=trueget_coverageconfig:readBusiness coverage: active zones and what happens to anything outside (out_of_coverage)set_coverageconfig:writeChooses what to do out of coverage (also for a delivery that doesn't reach that zone): out_of_coverage = take (take and notify) or reject (do not take)get_statsbookings:readBookings, occupancy and no-shows per resource; people only by default, pass kind=all for courts or placesget_control_summarybookings:read (conversations with messages:read, amounts with finance:analyze)\"How are we doing?\": attention now, tasks in progress by stage, numbers for the period (sold, collected, outstanding) and saturation by weekday and hour. Optional filters date_from\u002Fdate_to (today by default), service_id and resource_id. Read only; what the key cannot see comes back null Stages are counted by service and the task’s actual status. Collected uses the payment date, including work from another day; payments under review are current pending payments, including undated tasks. Each response preserves a single point-in-time view of the project.list_flows, get_flow, list_flow_versions, get_flow_versionconfig:readFlows (the path of stages that services pick), their services, exits and requirements; version historyvalidate_flowsettings:writeValidates without writing; returns impact with the tasks to move and shared_withsimulate_flowsettings:writeEntry dry run of an intent flow: where each entry phrase lands (the given one, unsaved) and whether it clashes; uses the project's AI for phrases the keywords don't decidecopy_flowsettings:writeCopies a flow (system flows too) into your own independent one with a new name, after confirmation; no service changescustomize_flowsettings:writeEdits a system flow in the business's own copy (created the first time, taking over the services that used the base), after confirmationrestore_flowsettings:write\"Back to original\" from the own copy: services return to the system flow and open tasks finish with the version they haddelete_flowsettings:writeDeletes a flow with no use and no tasks, after confirmationcreate_flow, update_flowsettings:writeCreate a flow or publish a version after preview and confirmation; publishing moves the tasks of every service on the flow. Each stage can carry bot_offers (what the bot offers while the task is there; an unknown item returns 422 bot_offer_unknown_item)revert_flowconfig:read + settings:writeCreates another version from the selected one; retains historyget_flow_examples, get_base_states, get_flow_message_catalogconfig:readFlow examples to copy, fixed engine states and the protected variables with the default text of each stage's customer messageget_flow_usagebookings:readHow much each flow is used: without flow_id, tasks that entered in the last 7 days against the previous 7; with flow_id, entered and completed per day and open tasks per stage with their average wait (bottleneck, the stage that holds things up most). Read-only.get_business_traits, set_business_traitsconfig:read \u002F settings:writeBusiness traits (from the closed catalog: «place calendar», «with spaces», «sells products»…) and the free business label, informational only. Saving replaces the list and label after confirmation; omitting business_label or sending null clears the label. To keep it, read get_business_traits and send the label when saving; it does not change booking rules or the calendarget_item_performancebookings:read (service, product); prepaid:read (plan)Performance of a service, product or package\u002Fclub in quantities (completed, units, sold, active today) per day, week or month, with the previous period. With a key these are the business totals (scope: business). Never returns amounts: they live in Finance. 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), late (late=true), queue, origin (origin=conversation is the chat order) and, optionally, with their balance and a payment-status filter on the page. With flow_id it keeps one flow's tasks and with group_by (stage, status, resource, priority, type, tag, day, zone, customer or flow) it adds counts per group; with group_by=stage and flow_id it returns every stage of the flow in order, like the columns of the panel's Board; statuses and resource_ids filter by “any of” those statuses or resources before paging; group_by=tag exposes the free text of tags and requires include_sensitive=true with customers:read; match applies the criteria of a Work view: several statuses, a date with its field and a relative range (today, last month, last N days…) resolved in the project's time zone, and “or” groups (any_of)create_taskbookings:writeCreates a task with a time, a queue task, or a to-schedule task with no time (schedule_later=true); with the flow_id of an intent flow, a task with no service (complaint, quote), no time and no amount; with internal=true, a team task with no customer (for a service with no price)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 tasklist_task_linesbookings:readThe task's items, its two blocks (services and products) and the margin (only with the costs permission)add_task_linebookings:writeAdds a catalog service or product, or a free-form item with a price and optional cost; raises the amount due, requires confirm=trueedit_task_linebookings:writeCorrects quantity, cost and, on a free-form item, name and price; requires confirm=trueremove_task_linebookings:writeRemoves an item and lowers the amount due (never below what was already paid); requires confirm=trueaccept_work_item_offerbookings:writeAccepts an offer («Offer…») from the task's current stage (listed in offers on the task detail): a product is added to that task at the catalog price and raises the amount due; a service creates another, independent task for the same customer. Requires confirm=true; never takes a price Item tools keep identifiers, quantities and amounts in the minimal response. To see names and units, use include_sensitive=true with the listed read scope. Changing the total of an accepted quote may send a revision to the customer, so these tools require confirmation. 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, card, transfer, Pix, Mercado Pago or other; the method is required and stays in the audit log), optionally split across tasksvoid_paymentpayments:voidVoids a payment, with a mandatory reasonexpense_categoriesexpenses:readThe project's 11 expense categories (fixed names, kind and whether it is hidden). «Staff commissions» is a calculated line: it is not entered by handexpense_listexpenses:readRecorded expenses by period, category or resource; the API adds up total_minor (approved only: without pending, rejected, voided or test ones; status filters by state). With tag_id, only the expenses with that tag: its total does not add up with another tag's, because an expense can have several. With no resource, the expense is «General»expense_recordexpenses:recordRecords an expense in the project's currency (local date, never in the future). Requires confirm=true; if the amount is large for the business (from twice the monthly price of its plan), also confirm_high_amount=true, a second confirmation from the person. Accepts tags (tags by name; new ones are created) and, without category_id, uses the category remembered by the first tag that has one (if none, 409 expense.category_required)expense_voidexpenses:voidVoids an expense with a reason; an expense is never deleted. Requires confirm=trueexpense_tagsexpenses:readThe project's expense tags («motorbike», «downtown store»), most used first, with the category each one remembers and how many expenses have itexpense_tag_renameexpenses:recordRenames a tag; if another already has that name, merge them with expense_tag_merge. Requires confirm=trueexpense_tag_mergeexpenses:recordMerges two tags: the expenses of one move to the one that stays and the other is deleted. Cannot be undone. Requires confirm=trueexpense_tag_deleteexpenses:recordDeletes a tag and removes it from its expenses; the expenses are not touched. Requires confirm=trueexpense_pendingexpenses:approveHow many expenses recorded by the team are waiting for approval and how much they add up to (without test ones)expense_historyexpenses:readHistory of an expense: who, when and what changed (before and after). There is no month closeexpense_getexpenses:readOne expense: amount, category, date, status (approved, pending, rejected or voided), receipt and review. It is the detail of an expense in Transactionsexpense_approveexpenses:approveApproves a pending team expense: from now on it counts. Nobody approves what they recorded. Requires confirm=trueexpense_rejectexpenses:approveRejects a pending expense with a reason; it stays rejected and does not count. Requires confirm=truerecurring_expense_listexpenses:readExpenses that repeat (rent, fixed salaries), with their next date and whether they are active, paused or endedrecurring_expense_createexpenses:recordCreates an expense that repeats every week or every month; Fiuit records it on each date, only once. Requires confirm=truerecurring_expense_updateexpenses:recordChanges the amount or the day, pauses or resumes it, or ends it, from now on. Requires confirm=truerecurring_expense_skipexpenses:recordSkips the next date without recording the expense. Requires confirm=trueapply_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 openrefund_paymentpayments:refundRefunds a Mercado Pago charge to the customer (full or partial), with a reason; without an amount, everything left. Requires confirm=true with the preview key: repeating it never refunds twice and never more than what was collected. Returns succeeded, failed (Mercado Pago rejected it), pending (retried automatically, checking Mercado Pago first) or review (Mercado Pago did not confirm it: it is not requested again, the amount stays reserved and Owner\u002FManager get an alert). Owner\u002FManager onlyget_payment_refundspayments:refundA charge's refunds: refunded, in progress and what can still be refunded (or why not)charge_fiscal_getpayments:fiscalTax marker of a charge and the business issuer's documents, if any. Fiuit never issues tax documents. Owner\u002FManager onlycharge_fiscal_markpayments:fiscalMarks whether a charge needs a tax document: not required, pending or issued outside Fiuit (with number and date). Only charges with money received. Requires confirm=true. Owner\u002FManager onlyget_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. refund_amount_unavailable lists tasks with a partial refund whose amount was not reported; they still count in full. Read onlyget_commission_settlementscommissions:readCommission settlements for a period: frozen amounts, automatic adjustments already frozen from other periods and what is still pending for the next open period. Read onlysettle_commissionscommissions:settle«Settle commissions»: freezes one team member's period in an entry that is never rewritten, with a reason. A later change (void, refund or rule) becomes an automatic adjustment on the first unsettled day. Settling the same period again returns the same entry. Requires confirm=truefinance_overviewfinance:analyzeFinance summary calculated by the API: In, Out and Left done for 2 previous periods and the current one, and what is still to come for the current and next period, confirmed (already received, fixed expenses) or expected (unpaid balance, estimated team commission, expenses awaiting approval). Only dated things.finance_resultfinance:analyzeCash-basis result calculated by the API: In (collected minus refunded), Out (approved expenses, team commissions and reported payment fees) and Left, with margin and the previous period, by period, resource, service or category. Expenses with no resource or service stay as «General», not split. missing_expenses warns that money came in and no expenses were recorded. Read onlyfinance_result_linesfinance:analyzeWhat makes up a Result figure: the payments, refunds, payment fees, team commissions and approved expenses it adds up, with signed amount, day, category, resource, service, person and customer. Open a row (row, «General» with general), In or Out (side) or one type (kind); total_minor is the opened figure even if the list is cut at limit. Read onlyexport_finance_result_csvfinance:analyze and finance:exportExports the period's Result as a CSV for the accountant: one movement per row (payment, refund, payment fee, team commission or expense) with category, resource, service, person, customer, readable amount and signed minor-unit amount; the sum is what was left. Same separator and decimals as Excel in the currency's country. Up to 50,000 movements. The 7-sheet Excel file is downloaded through the REST API. It is loggedcreate_finance_package · list_finance_packages · get_finance_packagefinance:analyze and finance:exportRequests the period's accountant package (7-sheet spreadsheet and one-page PDF summary, with the same numbers as the Result) and checks its status. A small one comes back ready with a download link valid for 5 minutes; a large one is put together separately. With an API key it does not include receipt photos: those are only downloaded from the panel. The file expires after 48 hours. It is logged | list_prepaid_plans | prepaid:read | Packages (N sessions with an expiry), clubs (N per month) and memberships (fixed monthly price, no usage count) in the catalog, with price, per-unit value and per-day\u002Ftime-band quota |\n| get_customer_plans | prepaid:read | A customer's packages, clubs and memberships: units left, reserved, expiry and fee due. Each period is an installment, a task that gets charged (period.booking_id); open_fees lists the installments to collect (task, due date and amount) and next_due_at the next due date. active = up to date, past_due = an installment past due and unpaid. Paying an installment = collecting its task (record_payment with that booking_id); there is no separate tool |\n| sell_prepaid_plan | prepaid:sell and payments:record | Sells a plan paid in person (cash, card, transfer, Pix, Mercado Pago or other; the method stays in the audit log). Unpaid (unpaid=true), the first installment stays To collect and is charged like any task (record_payment with its booking_id), as are the following ones. A club or membership billed by card is sold with the customer's email (payer_email), only when list_prepaid_plans returns card_billing_available=true: it waits for authorization and returns checkout_url, the Mercado Pago link where the customer authorizes their card (prepaid:sell is enough for this). If the customer already has that plan by card in force, it returns 409 prepaid_card_sale_exists with that sale's subscription_id: no second sale. Requires confirm=true |\n| cancel_prepaid_plan | prepaid:sell (refund: also payments:void and payments:record) | Cancels: no more installments are created and existing ones don't change (an unpaid one is still owed; the response lists them in open_fees); frees the sessions of future tasks. With refund=true returns what was not used in the current period's installment 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 | cancel_booking also requires confirm=true: without it, it returns the booking and confirmation_required and cancels nothing. Show the booking to the person before repeating the call with 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.expense_record, expense_void, expense_approve, expense_reject and the recurring_expense_* tools that write are money too: they require confirm=true and idempotency_key. Renaming, merging and deleting tags do not move money, but they also require confirm=true (no idempotency_key). To correct an expense from an agent, void it and record it again; editing with history is done in the panel. The photo or PDF of an expense receipt does not go through MCP or an API key: it is attached with a panel session. 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":3956,"title":3957,"titles":3958,"content":3959,"level":263},"\u002Fdocs\u002Fmcp#oauth-connection-permissions-and-tools-that-do-not-appear","OAuth connection: permissions and tools that do not appear",[213],"When the owner connects Claude or ChatGPT (see Connect your AI), the AI uses a token with the permissions they ticked on the permissions page. What differs from an API key: Several projects in one connection. An API key belongs to one project; an OAuth connection can cover several. list_projects lists them (id, name, slug, role and permissions in each) and every tool takes an optional project with that id or slug, which the MCP sends as the X-Wagend-Project header. With a single project it is not needed. With several and no project, the tool answers 400 project_required with the list so the AI can ask; a project outside the connection gives 403 project_not_in_connection, whether it exists or not. Permissions and role are checked on every call, in the chosen project. With an API key, list_projects returns its only project.The tool list is trimmed. Only the tools the token can use appear. get_task_balance and list_tasks with include_balance=true need payments:read_balance (the «See money» permission): without it, the tool does not appear or answers 403 insufficient_scope. To add it, connect again ticking «See money» (only the owner can grant it). \u002F.well-known\u002Foauth-protected-resource publishes scopes_supported so the client knows what to ask for.Editing the products of an order (replace_task_items) needs only bookings:write; seeing money is not required. The amount due is recalculated and the API does not let the order drop below what was already collected (409 order_below_paid).Cash payments: record_payment with method: \"cash\" and the payments:record permission («Record payments and send payment links»). Manually adjusting the amount due (payments:adjust) is not granted through OAuth: do it from the panel.Zone of an address: match_zone needs coordinates (lat and lng), neighborhood, city or postal code; a free-text address alone returns zone: null. With coordinates the drawn area wins, and the zone of a customer's saved address uses the same rule.Customers: list_customers without include_sensitive=true returns only id and locale; to pick a customer by name you need include_sensitive=true (and customers:read).Timeline: customer.updated and booking.updated carry fields or changed with the names of the edited fields, never their values.",{"id":3961,"title":3962,"titles":3963,"content":3964,"level":263},"\u002Fdocs\u002Fmcp#partner-panel-partner","Partner panel (partner)",[213],"If you are a Fiuit partner, your AI can read your portfolio with the same rules as your panel. All of them are read-only (readOnlyHint) and need the partner:read scope: over OAuth, the \"View your partner portfolio\" permission, which the permissions page only offers to a partner. Without that scope, they are not listed. ToolScopeDoespartner_todaypartner:readThe next action, portfolio progress and alertspartner_clientspartner:readYour clients with plan, last use, counts and health light; sort, cursor and quick filterpartner_client_detailpartner:readOne client and its milestones. A project outside your portfolio returns 404 client_not_foundpartner_activitypartner:readYour clients' milestones, newest first The partner is whoever issued the credential (created the key or authorized the connection), never a field of the request. A key with the scope issued by someone else returns 403 partner_required; if the partner is deactivated or leaves the credential's project, it stops working on the next call. Counts and statuses only: neither the businesses' content nor their amounts. Creating a project for a client stays panel-only.",{"id":3966,"title":3967,"titles":3968,"content":3969,"level":263},"\u002Fdocs\u002Fmcp#example-requests","Example requests",[213],"\"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":3971,"title":3972,"titles":3973,"content":3974,"level":263},"\u002Fdocs\u002Fmcp#docs-for-llms","Docs for LLMs",[213],"\u002Fllms.txt lists every documentation page.\u002Fllms-full.txt contains the full documentation in Markdown. Flows: flow tools require flow_id (list_flows); create_service and update_service accept flow_id to pick a service's flow. update_flow validates before previewing (impact and shared_with, the services sharing the flow, all of which change); confirm=true creates a version. System flows are not edited directly: customize_flow gives the own copy (edited with update_flow) and restore_flow goes back to the original; or copy_flow (or create_flow) and assign it. delete_flow deletes a flow with no use and no tasks. revert_flow creates another version (read config:read and write settings:write). validate_flow, get_flow_examples and get_base_states cover configuration. “How the task looks”: update_flow with task_view picks what goes on top of the task (main: auto, when, destination, order or none), whether the customer and payment chips show (chips.customer, chips.payment) and the “Items” switch (items: off, the task doesn't offer “+ Add item”; items already added stay visible). Whatever you don't send stays the same and clear_task_view=true goes back to automatic. Without confirm it shows task_view_diff with the before and after; it doesn't create a version or move tasks and also works on a system flow. Each task carries the current setting in task_view. 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. create_service and update_service accept price_per_time («Price by time», with confirm=true): when a task of that service changes duration, its amount is recalculated proportionally, except with a payment or deposit recorded or an amount adjusted by hand. create_service and update_service accept duration_options (the durations the customer picks when booking, for example 1 h, 1 h 30 and 2 h: [{\"minutes\": 90, \"price_cents\": 17000000}], up to 6; without a price, prorated; with confirm=true); clear_duration_options removes them. find_slots and hold_slot accept duration_min (one of those durations): the booking is a single task with that duration and its price; any other duration returns 422 duration_not_offered. create_service and update_service accept location_mode (local, customer_address, customer_choice or remote: remote, no address) and meeting_url, the http(s) meeting link of a remote service that the business adds (Fiuit does not generate it); clear_meeting_url removes it and switching to another mode deletes it. The bot and reminders share that link instead of an address. update_service accepts title_template: the pieces of the title of that service's tasks (1 to 3: customer, order, address, number or field:\u003Ckey> for a form or stage field), joined by « · »; clear_title_template goes back to «Customer · Order». update_task_metadata accepts title to write a task title by hand (it stays fixed) or null to make it automatic again. Both are writes: they show the proposal with the change and apply with confirm=true. create_service and update_service accept booking_payment («Charge when booking»: none, deposit or total) and deposit_cents, with confirm=true. With total the appointment charges the task's full value through the deposit flow; deposit without a deposit returns 422. Values are validated before calling the API. They also accept full_day («Full day»): drop off and pick up, and the customer picks the day, not the time. There is a single slot per day, from opening to closing; with a place that serves 3 at a time, 3 fit per day. It is not valid for a service that assigns a person (a team with a staff resource): it returns 422 service_full_day_invalid. list_tasks(date_from=…, date_to=…, include_carried=true) adds the started tasks that are past their end and still take their place on those dates (full-day service or no person, up to 7 days after the end): they come with carried_over=true and carried_until. It is the same rule availability uses, with the bookings:read scope. By default (fees=due), list_tasks shows only club and membership fees that are overdue or due within the plan's notice days, like Today and Work: it leaves out paid and waived fees and those charged to a card while the charge is on track. fees=all returns them all (for example, to see a customer's fee history). create_service and update_service accept chat_payment («Chat payment», with confirm=true): mode (on_delivery|ask|link), prepare (anyway|after_payment) unpaid (keep|cancel) and remind (boolean: a single reminder to the customer before the link expires); it carries no amounts, the link is for the task balance that Fiuit calculates and requires Mercado Pago to be ready. 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; the executor applies the current service policy to completed destinations. Explicit payments_enabled=false does not require collection resolution or erase balances (changed from F3-177).",{"id":3976,"title":3977,"titles":3978,"content":3979,"level":263},"\u002Fdocs\u002Fmcp#mercado-pago","Mercado Pago",[213],"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.\nF4-25: get_mercadopago_account (payments:read) also returns workspace_currency, mismatch (currency or country when the account collects in another currency or country than the project: no links are created), methods (link, Pix, QR and card with available and a reason when unavailable; QR and card do not exist yet) and deposit_hold_minutes. list_mercadopago_charges (payments:read, read-only) lists the latest Mercado Pago payments with status, amount, purpose and task, without payer data or link. The account is connected and each service's deposit is edited in Finance → Charges. F4-23: get_mercadopago_account adds the point method (Point Smart terminal; reason terminal_required when no terminal is linked) and account.point_terminal_id. Linking the terminal and «Charge with Point» are panel-only: there is no MCP tool (the operations do not accept API keys). F4-20: create_payment_link (payments:link) creates the Mercado Pago link for a task balance («Charge»); without amount_minor, the API calculates the amount. Without confirm it returns a preview with idempotency_key; confirm=true requires that key. deliver=\"conversation\" also sends it in the customer’s conversation. An open link for the same amount is reused; with another amount open it answers 409 payment.link_pending. F4-92: «Charge a part». create_payment_link accepts an optional amount_minor (integer in minor units, the one a person gave): it creates a separate link for that part, alongside other open parts. Open charges never add up to more than the balance: if it does not fit, it answers 422 payment_part_exceeds_balance with remaining_minor (what is left to cover) and open_minor. Retrying with the same idempotency_key returns the same part; another key is another part even for the same amount. Without an amount, the link charges what is left without a part. cancel_payment_charge (payments:link, confirm=true) voids an open link, either a part or the balance link (QR and Point are voided only from the panel); a paid one answers 409 payment.charge_not_open. The get_task_balance history with include_charges=true marks each part with part=true. QR and Point with an amount are panel-only.",{"id":3981,"title":3982,"titles":3983,"content":3984,"level":263},"\u002Fdocs\u002Fmcp#feedback-after-the-service","Feedback after the service",[213],"get_feedback(kind, identifier) (bookings:read): booking, service, customer, resource; 0–100. get_feedback_settings (config:read). What the bot sells: bot_offer (config:read) returns what the bot offers in chat today (enabled kinds, services, products of each order mode, plans and the «see all or sign up» link). stages lists the flow stages that narrow that list; with flow_id and stage together it returns what a customer whose task is at that stage would see. list_services and search_products include bot_offered per item: when off, the bot never names or sells it. Item links: create_service and update_service accept offer_url (clear_offer_url removes it) and save_product takes it in the product; https, up to 500 characters. When set, the bot shows it next to the item; otherwise it uses the bot link. bot_offer returns it on every service, product and plan. Search your store: get_store_search shows the live product search in your online store (Tiendanube, WooCommerce, Shopify, Make, n8n or your own URL): the template, the search URL with {q}, the field mapping, the chat-order service the products go into, how many results the bot shows and whether it is on; for credentials it only gives their names. list_store_search_presets lists the ready-made templates. save_store_search creates or edits it and disable_store_search turns it off: both show before and after without writing and only change with confirm=true. Credentials go in headers, are stored encrypted and are never returned. test_store_search runs the same search as the bot and shows the products with their price. All of them need products:write. Bot service: bot_tree (config:read) returns the bot's service tree: the branches (services, products, subscriptions, own flows, questions, my appointments and talk to a person) with whether they are paused, whether they can be paused and which task and flow each leads to. Pausing services, products or subscriptions is the sells field of “What the bot sells”. Branches come in the order the bot offers them, with the root flow_id, its greeting (greeting) and the saved order (order): update_flow on that flow_id with order or greeting changes them (config:write, the same permission as “What the bot sells”). A paused own branch can be ordered too and keeps its place. The root cannot be deactivated or duplicated. Conversation path: bot_tree_funnel (config:read) tells, per branch of the bot service tree and over the last days (days, 7 by default), how many conversations created a task, were answered, went to a person or dropped off, and at which step; bot_conversation_path shows the path a conversation took and where it stopped. Neither includes what the customer wrote. Your website: get_site (config:read) shows «Customer care → Website»: template (booking, catalog or showcase), the optional sections ticked (gallery, team and resources, reviews, plans), the hero and «About us» texts, the subdomain (business.fiuit.app) and whether it is published. update_site changes those fields and publish_site \u002F unpublish_site turn it on or off (config:write); all three show before and after without writing and only change with confirm=true. The website starts off. What it shows from the catalog is exactly what the bot offers (bot_offer), and its FAQ are the bot's. The subdomain is 3 to 40 lowercase letters, digits and hyphens, never reserved or taken; changing it on a published website turns the old link off (there is no redirect) and requires confirm_link_break: true inside changes; without it the API answers 409 and nothing changes. If Fiuit revokes a website, it cannot be published again until it is restored. «Made with Fiuit» shows in the website footer: on a paid plan it is removed with made_with_fiuit: false (can_hide_made_with_fiuit tells whether your plan allows it); on the free plan the API answers 409 and it stays visible. 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. 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":3986,"title":3987,"titles":3988,"content":3989,"level":263},"\u002Fdocs\u002Fmcp#setup-from-claude-or-chatgpt-fiu-525","Setup from Claude or ChatGPT (FIU-525)",[213],"Owner guide: Set up Fiuit with Claude or ChatGPT. Prompts (prompts\u002Flist), one per task and language, no arguments: setup_from_scratch_{pt,es,en} (a short interview like Wagy's: calendar, hours, what it sells, how it gets paid), setup_bot_and_knowledge_{pt,es,en} (bot and knowledge base) and import_catalog_{pt,es,en}. They are fixed instructions that name existing tools; every write still goes through preview and confirm=true. The setup audit (audit_setup) ships separately.Resources: fiuit:\u002F\u002Fsetup\u002F{pt,es,en}\u002Fguide (best practices and example business types, Markdown) and the template fiuit:\u002F\u002Fsetup\u002F{lang}\u002Fexamples\u002F{key} (services, flows, automations off, questions and typical hours of a business type; applied with apply_examples).Import from files: preview_products_csv takes csv, xlsx (base64 Excel file) or rows (up to 2000 rows the model read from an Excel file, PDF or photo) with columns {header: name|short_name|unit|price|category|synonyms|sku|active|featured|sort_order}; it also returns columns and ignored_columns. undo_products_import(import_id, confirm) undoes a confirmed import (deletes what it created, or archives it if it has history; updated products go back to their previous values) while the catalog is unchanged (409 products.import_undo_stale), up to 7 days.Services in bulk: preview_services_import (same sources; columns name, duration_min, price, team, full_day, bot_offered; create only), confirm_services_import and undo_services_import, with config:write. The API builds the table and validates.Origin: the MCP sends the app's name (clientInfo or User-Agent) in X-Wagend-Client-Name; the audit log stores it as client next to the mcp actor («MCP · Claude»). It grants nothing.",{"id":3991,"title":3992,"titles":3993,"content":3994,"level":263},"\u002Fdocs\u002Fmcp#business-operations-f4-45","Business operations (F4-45)",[213],"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:writeCustomer vehicles (FIU-609): list_customer_assets, get_customer_asset \u002F create_customer_asset (the plate or the model is enough), update_customer_asset, delete_customer_assetcustomers:read \u002F customers:writeAsset types: list_customer_asset_types \u002F turn on Vehicles with create_customer_asset_type ({\"preset\": \"vehicle\"}) or turn it off (active: false: cars stay read-only)customers:read \u002F config:writelist_conversations, list_conversation_messages, countsmessages:readsend_conversation_message, mode, resolve, read, intent, open conversation and add_conversation_note (system notice, never sent to the customer)messages: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:writeSales per product (get_products_stats) \u002F performance per package or membership (get_prepaid_plans_stats); money only with finance:analyzebookings:read \u002F prepaid:readSchedules, zones, resources, automations and knowledgeconfig:read \u002F config:writeFinancial summary, reports, debt, accounts, customers and forecastfinance:analyzeCollection figures (get_finance_collections): gross, refunded, Mercado Pago fee, Fiuit fee and net by method, service and day or week, plus the estimate with no paymentfinance: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":3996,"title":3997,"titles":3998,"content":3999,"level":301},"\u002Fdocs\u002Fmcp#customer-notices-and-delivery-log","Customer notices and delivery log",[213,3992],"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. get_notices_overview (config:read) returns the “Notices” index: everything the customer receives, ordered from the appointment, with each notice’s effective value, why it is held back and where it is edited. With config:write, set_notice_item_enabled turns a notice on or off in its source (rule, per-service policy, stage or flow) and set_all_notices_enabled is “turn off all customer notices”; both ask for confirm=true. The most specific wins: each notice’s own switch decides, and the general one beats everything. Stage rows publish the source flow and also require settings:write; without it, toggleable=false and writes return 403. 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":4001,"title":4002,"titles":4003,"content":4004,"level":263},"\u002Fdocs\u002Fmcp#configure-the-business-over-mcp-and-fiuit-help-fiu-397","Configure the business over MCP and Fiuit help (FIU-397)",[213],"Everything onboarding sets up can also be configured over MCP, with the API key's permissions: ToolScopeDoesduplicate_serviceconfig:write (settings:write to copy stages)Creates a paused copy of a servicedelete_scheduleconfig:writeSoft delete: keeps future bookings and returns themdelete_service, delete_resource, delete_resource_groupconfig:writeWithout mode it pauses (reactivate with update_* and active=true). mode=remove deletes when there is no history and archives when there is; archive archives; delete deletes or fails with 409 catalog_item_has_history. With future bookings it fails with 409 catalog_item_future_bookings and their listdelete_productproducts:writeSame, remove by defaultget_service_removal, get_resource_removal, get_resource_group_removal, get_product_removalconfig:write \u002F products:writeWhat removing would do: delete or archive, and which future bookings it hasrestore_service, restore_resource, restore_resource_group, restore_productconfig:write \u002F products:writeTakes an item out of «Archived»; it comes back pausedget_bot_settings, update_bot_settingsconfig:read \u002F config:writeBot personality (name, tone, greeting, what it sells, product photos), versionedcreate_prepaid_plan, update_prepaid_planprepaid:manageDefines packages and memberships: price, units, validity, quotas and services, and their installments: due date (due_rule: signup, month_start, month_end or fixed_day with due_day 1–28), notice days (notice_days, 5 by default), first_fee_full (without it installment 1 is prorated) and sign-up flow (flow_id). A new price applies to the next installment of each live subscription (the customer is not notified; the response includes live_subscriptions). Selling is still sell_prepaid_planlist_recommended_automations, install_recommended_automations, set_recommended_automation_activeconfig:read \u002F config:writeAutomations recommended by the business example; installed inactive and activated one by oneget_automation_stage_optionsconfig:readValid stages and actions for stage rulespreview_customer_noticesconfig:writePreview of customer notices with sample data; sends and saves nothinglist_knowledge_sources, get_knowledge_source, list_knowledge_source_pagesconfig:readWeb sources and listings of the knowledge basepreview_knowledge_source, create_knowledge_source, update_knowledge_source, refresh_knowledge_source, delete_knowledge_sourceconfig:writeRegister, pause, refresh or delete a source (deleting also removes what it imported)list_live_queries, create_live_query, update_live_query, test_live_query, disable_live_queryconfig:writeLive HTTP queries the bot usesapply_business_templatesettings:writeApplies the industry template (barbershop, beauty, clinic…): vocabulary plus inactive automations and flows. Only on a new, empty project; it cannot be picked againapply_examples, undo_examplesettings:writeComposes 1 to 3 examples by part (vocabulary, flows, automations, catalog) and undoes them without touching what the business changedget_vocabulary, update_vocabularyconfig:read \u002F settings:writeProject glossary (what tasks, customers and the team are called)export_project_templateconfig:readThe project configuration as a template (flows, catalog, plans, help, bot and automations), without customer data or secretsget_bot_channel_policies, update_bot_channel_policyconfig:read \u002F config:writeBot policy per channel: required contact, reply limit, handoff and channel instructionupdate_feedback_settingssettings:writeConfigures feedback after the service (read with get_feedback_settings)search_helpany keySearches Fiuit help: how-to guides, \"What happens if…?\" and live product policies, with links to the guide and to contact. Reads no business data Credentials for sources and live queries never travel through MCP: they are entered in the dashboard and the API never returns them. Only what makes no sense to open stays out: the dashboard session and CSRF, streams, the simulator, webhook and channel secrets, the personal bell, large binary downloads (you get the link), the guided onboarding chat (its results are above), revoking a feedback link and cancelling the subscription. Labels on every write. Every tool that writes declares in its description and in _meta[\"wagend\u002Flabels\"] whether it notifies the customer (notifies_customer), whether it moves money (moves_money) and whether it is reversible, with the tool that undoes it (inverse). Anything that reaches the customer or moves money should always get a person's explicit confirmation.",{"id":4006,"title":446,"titles":4007,"content":4008,"level":263},"\u002Fdocs\u002Fmcp#pause-and-duplicate",[213],"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 is duplicate_service (paused copy, with confirmation). API: POST \u002Fv1\u002Fservices\u002F{id}\u002Fduplicate, Idempotency-Key, config:write; settings:write to copy stages.",{"id":4010,"title":4011,"titles":4012,"content":4013,"level":263},"\u002Fdocs\u002Fmcp#unpaid-memberships","Unpaid memberships",[213],"list_prepaid_subscriptions lists project subscriptions with debt and pause (limit\u002Foffset); memberships include standing: up to date, in grace (grace, with the days left) or blocked (blocked, no coverage until paid; it unlocks by itself on payment). With unpaid=true, only unpaid ones (club or membership), with the customer name and the months owed (months_due), blocked first and clubs last. The response carries unpaid_count, the project's total of unpaid subscriptions even when there are more than limit. set_prepaid_benefits pauses an unpaid club or reactivates benefits with confirm=true, without charging or clearing debt. Both require prepaid:benefits. Paying an installment does not reactivate: use set_prepaid_benefits. With the membership blocked, hold_slot and creating tasks for the member for that membership's services return 409 membership_blocked (with plan): the fee must be settled and it unlocks by itself once paid. If your project is «Awaiting payment» (Fiuit's plan payment did not arrive and the grace period ended), every tool returns 402 workspace_awaiting_payment, read tools included, until the payment arrives.",{"id":4015,"title":4016,"titles":4017,"content":4018,"level":301},"\u002Fdocs\u002Fmcp#flows-v2","Flows v2",[213,4011],"Flows v2: validate_flow, create_flow and update_flow take flow with\nformat:2, stages and exits. Preview returns impact (total, up to 100 moves, by_service and shared_with);\nconfirm=true confirms publishing\u002Frestoring and moving open tasks to the first stage\nwith the same base status, without running entry notices. The team sees every item;\nwith visible_to customer, the bot asks those items and presses those buttons in the chat where the task was born\n(source customer_chat in the history). A stage can move on by itself: a timer item with\ntimer: {until: duration|task_start|task_end|no_reply, minutes, to} (to is a button of the stage without mandatory items; task_start and task_end take no minutes, follow the task's start or end time and only exist in scheduled flows) or\nauto: payment_received on a button (the task fully paid through Mercado Pago). Tasks carry stage_deadline for the\ncountdown and the move is logged with source auto. If the move fails, the task carries auto_advance_failed until someone moves it. A payment recorded by hand also triggers auto: payment_received. Also auto: customer_replied (the customer wrote on any channel after the task entered the stage) and auto: form_completed (every required item the customer sees is filled; the stage needs at least one), one per event in each stage; the reason is in data.automatic. move_work_item_stage and\nuse_work_item_tool require from_stage; also send config_version read from the\ntask. A 409 stage_conflict requires refreshing the task. Button requirements use\nitem.\u003Ckey>; Close without completing uses exit.reason and stores a private reason.\nRestoring v1 returns 422 version_format_unsupported. V2 excludes public customer\nlinks, the simulator, payment\u002Fproduct items and conditions. Existing manual payments\nkeep the service policy. SLA and escalation (F3-595), until: duration only: alert: {roles} or alert: {resource: assignee} instead of to alerts the team when it expires and the task stays in the stage (one alert per entry; stage_deadline.alert is true); by_item: {item, minutes: {option: min}} takes the minutes from the answer to an options item (with no answer minutes applies) and from: created counts from creation. In a queue flow, the entry stage (held) accepts a duration timer to escalate what nobody took. Cap: 43200 minutes (30 calendar days). get_work_item_stage_history returns actor, source, kind and items with historical labels, including moves caused by publishing a flow. It returns the latest 100 events, newest first; the API accepts order=asc for chronological display. Photos and signatures are private references: fetching a file requires an authorized task download. visible_to only restricts the customer; team members retain their authorized task scope. Wagy can explain this journey through get_work_item within its existing scope. The live_location item («Live location») is never filled through MCP or a form: on entering that stage the Telegram team bot asks the assignee to share their live location and the item is fulfilled by the first position. A task's last position is read with GET \u002Fv1\u002Fbookings\u002F{id}\u002Flocation-events (same permissions as the task); the team map (GET \u002Fv1\u002Ftasks\u002Flive-locations) is panel-only.",{"id":4020,"title":4021,"titles":4022,"content":4023,"level":263},"\u002Fdocs\u002Fmcp#review-every-service-before-changing-a-flow","Review every service before changing a flow",[213],"When changing shared stages, you see which other services change and confirm the updated scope. update_flow \u002F revert_flow: Send the reviewed and accepted IDs from validation.impact.shared_with in shared_with_ack. On 409 stage_shared_unconfirmed, validate again and request a new confirmation; do not retry automatically. The list includes every service using the flow, including the edited one. get_work_item_journey (tasks, bookings:read) reads a complete task journey with historical maps: chronological events and referenced v2 versions, including retired stages. It preserves authorized task access and never substitutes the current flow for a missing version. By default it returns keys and dates; include_sensitive=true reads historical labels, actors and answers with bookings:read. configure_pay_info previews and saves the payment details used without Mercado Pago (bank transfer, Pix), one text per language: texts with pt, es or en, up to 600 characters each; {} clears them (settings:write, confirm=true). The bot shows them when chat payment is «ask» and Mercado Pago isn't ready; «I paid» only alerts the team and never records a payment. Reading these details is for the panel and Wagy: an API key can't read GET \u002Fv1\u002Fworkspace; the confirmed response returns what was saved. configure_chat_payment previews and saves the business default chat payment rule (settings:write, confirm=true). update_service sets a custom rule with chat_payment or restores inheritance with inherit_chat_payment=true (config:write, confirm=true). The server calculates the amount; these tools do not create links. Cancelling the subscription (GET \u002Fv1\u002Fsubscription, POST and DELETE \u002Fv1\u002Fsubscription\u002Fcancellation) is only for the Owner's panel session: an API key gets 403 and there is no MCP tool. Wagy reads the state and links to the screen, but never cancels. get_control_summary: Attention matches Today: late respects the project grace period; notice_undelivered only open tasks; feedback_review includes finished tasks; out_of_coverage only open tasks, excluded from unzoned. Reasons may overlap: do not sum their counts. list_tasks(attention=\"notice_undelivered\") uses the same selection as the Control counter. attention accepts all eight attention reasons, combines with other filters before pagination and grouping, and adds no implicit dates. The scope remains bookings:read. Intent flows can declare entry when created or edited: when to use them, examples, exclusions, keywords, and whether customers may start them. MCP previews these changes before confirmation. At most eight intent flows may be active. The bot collects initial details through chat and asks for confirmation before creating a task; direct task creation through MCP remains an explicit action. With list_tasks(group_by=\"flow\"), flow_capabilities returns only outcomes and delivery: the statuses supported by the project’s active flows, even without tasks, without names or IDs. A queue served at the business location does not imply deliveries. Saving traits builds the glossary automatically if none is saved, preserving your edits. To change its names, use Settings → Vocabulary or ask Wagy and confirm the proposal. Glossary editing requires a panel session and is not offered through MCP.",{"id":4025,"title":4026,"titles":4027,"content":4028,"level":301},"\u002Fdocs\u002Fmcp#propose-a-new-trait-with-wagy","Propose a new trait with Wagy",[213,4021],"get_trait_catalog (config:read): pt\u002Fes\u002Fen. list_trait_proposals(cursor) (config:read). propose_trait(trait, confirm=false) \u002F confirm=true (settings:write). Wagy prepares a name and questions in three languages. Review the proposal and confirm sending it: it stays as your own label until the team approves, rejects or merges it. Your customer service stays the same.",{"id":4030,"title":4031,"titles":4032,"content":4033,"level":263},"\u002Fdocs\u002Fmcp#what-happens-if-the-ai-assistant-channel-reaches-its-limit","What happens if the AI-assistant channel reaches its limit?",[213],"Capacity is shared by the business: 600 AI calls and 200 new conversations per day, and up to 10 time slots held at once. Different people share these limits and can use them up. You receive a notice in Customer care → Channels notifications; the channel returns when the allowance renews or held slots are released. Other channels keep working. If the AI limit is reached during a reply, the bot asks the assistant to wait without handing the conversation over for that reason.",{"id":4035,"title":4036,"titles":4037,"content":4038,"level":263},"\u002Fdocs\u002Fmcp#closure-reasons","Closure reasons",[213],"get_flow → exits.close.reasons \u002F exits.cancel.reasons: {key, label: {pt, es, en}}; update_flow → confirm=true. get_outcome_reasons(start, end, service_id?, resource_id?) → bookings:read. Set reasons in My business → Stages. When closing, choose one or Other with an explanation. Cancellation allows omitting it. Results shows counts by flow, exit and reason. 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":218,"title":217,"titles":4040,"content":4041,"level":257},[],"API recipes (customers, tasks, actions, webhooks) and how to model a barbershop, aesthetics, clinic, restaurant and deliveries.",{"id":4043,"title":4044,"titles":4045,"content":4046,"level":263},"\u002Fdocs\u002Frecipes#api-recipes","API recipes",[217],"All of them use $WAGEND_KEY as in the quickstart.",{"id":4048,"title":4049,"titles":4050,"content":4051,"level":301},"\u002Fdocs\u002Frecipes#create-a-customer-and-book-for-them-in-one-go","Create a customer and book for them in one go",[217,4044],"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":4053,"title":4054,"titles":4055,"content":4056,"level":301},"\u002Fdocs\u002Frecipes#read-what-is-due-today","Read what is due today",[217,4044],"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":4058,"title":4059,"titles":4060,"content":4061,"level":301},"\u002Fdocs\u002Frecipes#assign-and-close-a-delivery-with-actions","Assign and close a delivery with actions",[217,4044],"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":4063,"title":4064,"titles":4065,"content":4066,"level":301},"\u002Fdocs\u002Frecipes#receive-webhook-notifications","Receive webhook notifications",[217,4044],"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":4068,"title":4069,"titles":4070,"content":4071,"level":263},"\u002Fdocs\u002Frecipes#templates-by-business","Templates by business",[217],"Each recipe matches a ready-made template you can pick during onboarding.",{"id":4073,"title":4074,"titles":4075,"content":4076,"level":263},"\u002Fdocs\u002Frecipes#barbershop","Barbershop",[217],"Each barber is an exclusive staff resource with their own schedule. One team, 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":4078,"title":4079,"titles":4080,"content":4081,"level":263},"\u002Fdocs\u002Frecipes#aesthetics","Aesthetics",[217],"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":4083,"title":4084,"titles":4085,"content":4086,"level":263},"\u002Fdocs\u002Frecipes#clinic","Clinic",[217],"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":4088,"title":4089,"titles":4090,"content":4091,"level":263},"\u002Fdocs\u002Frecipes#restaurant","Restaurant",[217],"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":4093,"title":4094,"titles":4095,"content":4096,"level":263},"\u002Fdocs\u002Frecipes#deliveries","Deliveries",[217],"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":4098,"title":4099,"titles":4100,"content":4101,"level":263},"\u002Fdocs\u002Frecipes#wagy-set-up-your-business-with-wagy","Wagy · Set up your business with Wagy",[217],"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":227,"title":226,"titles":4103,"content":4104,"level":257},[],"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":4106,"title":4107,"titles":4108,"content":4109,"level":263},"\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?",[226],"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":4111,"title":4112,"titles":4113,"content":4114,"level":263},"\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?",[226],"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":4116,"title":4117,"titles":4118,"content":4119,"level":263},"\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?",[226],"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":4121,"title":4122,"titles":4123,"content":4124,"level":263},"\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?",[226],"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":4126,"title":4127,"titles":4128,"content":4129,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-i-reschedule-a-booking","What happens if I reschedule a booking?",[226],"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":4131,"title":4132,"titles":4133,"content":4134,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-i-cancel-a-booking","What happens if I cancel a booking?",[226],"The slot is released immediately and pending reminders are cancelled. The customer can receive a cancellation notice if you have it on in Customer care → Automatic messages.",{"id":4136,"title":4137,"titles":4138,"content":4139,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-a-customer-doesnt-show-up","What happens if a customer doesn't show up?",[226],"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":4141,"title":4142,"titles":4143,"content":4144,"level":263},"\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?",[226],"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":4146,"title":4147,"titles":4148,"content":4149,"level":263},"\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?",[226],"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":4151,"title":4152,"titles":4153,"content":4154,"level":263},"\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?",[226],"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":4156,"title":4157,"titles":4158,"content":4159,"level":263},"\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?",[226],"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":4161,"title":4162,"titles":4163,"content":4164,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-about-a-partial-payment-or-uncertain-link","What about a partial payment or uncertain link?",[226],"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":4166,"title":4167,"titles":4168,"content":4169,"level":263},"\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?",[226],"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":4171,"title":4172,"titles":4173,"content":4174,"level":263},"\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?",[226],"The reversal subtracts from the same person using the original payment rule, even if it ended or changed. A Mercado Pago partial refund is deducted automatically on the day its notice with the amount arrives, without changing earlier days. If the notice has no amount, the payment counts in full and the Owner or Manager see a warning. For QR or Point payments the amount never arrives: the warning stays until the full refund, and to deduct it sooner, make a commission adjustment. See Finance → Commissions.",{"id":4176,"title":4177,"titles":4178,"content":4179,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#how-are-amounts-displayed","How are amounts displayed?",[226],"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":4181,"title":4182,"titles":4183,"content":4184,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#does-fiuit-charge-a-fee-on-each-payment","Does Fiuit charge a fee on each payment?",[226],"Only if you agreed on one with Fiuit: by default it is 0. If your agreement includes it, Mercado Pago deducts\nit from deposits and service or balance payment links made with your linked account and the rest reaches your\naccount as usual. If it cannot be applied because of currency or amount, collection\ncontinues without a fee and Fiuit is notified. It never applies to manual payments or if your account is not\nlinked to Fiuit (Finance says so). You see the current fee in Finance, read only.",{"id":4186,"title":4187,"titles":4188,"content":4189,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#which-fiuit-fee-applies-to-a-payment-received-after-cancellation","Which Fiuit fee applies to a payment received after cancellation?",[226],"A payment confirmed after cancellation, expiry or failure keeps the fee from the original agreement,\neven if closing the link had reduced it to zero. Refunds and chargebacks keep that fee too.\nIt only stays at zero if your agreement could not apply to that payment (currency or amount).\nYou can view your fee in Finance.",{"id":4191,"title":4192,"titles":4193,"content":4194,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-if-mercado-pago-does-not-withhold-fiuits-fee-on-a-link","What if Mercado Pago does not withhold Fiuit's fee on a link?",[226],"The link is sent anyway and the payment keeps the fee from your agreement in force when it was created;\nFiuit is notified to settle it another way. Fiuit sets each payment's fee from your agreement and it\ndoes not change afterwards. It only stays at zero if your agreement could not apply to that payment or\nthe payment closed without receiving money. You can see it in Finance.",{"id":4196,"title":4197,"titles":4198,"content":4199,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-refund-a-customer-who-paid-through-mercado-pago","Can I refund a customer who paid through Mercado Pago?",[226],"Yes, if you are an Owner or Manager. In the task, Payment section, tap Refund on the payment: choose the amount (all or part) and the reason. You can never refund more than what was collected and, if Mercado Pago is slow to confirm, Fiuit checks Mercado Pago before asking again, so it never refunds twice. If it still does not confirm, you get an alert to check it in Mercado Pago.",{"id":4201,"title":4202,"titles":4203,"content":4204,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#is-the-deposit-refunded-if-the-customer-cancels-in-time","Is the deposit refunded if the customer cancels in time?",[226],"Only if the service has a cancellation window set up: cancelling at least that many hours ahead refunds the deposit paid through Mercado Pago. If they cancel later, the deposit is kept. Refunded money stops counting as collected deposit in statistics.",{"id":4206,"title":4207,"titles":4208,"content":4209,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-the-customer-disputes-a-payment-in-mercado-pago","What happens if the customer disputes a payment in Mercado Pago?",[226],"It is a chargeback: the payment is marked Chargeback, the amount stops counting as collected and Owners and Managers get an alert to review the task. Fiuit does nothing else on its own.",{"id":4211,"title":4212,"titles":4213,"content":4214,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-the-customer-disputes-a-payment-i-already-refunded","What happens if the customer disputes a payment I already refunded?",[226],"The payment stays Refunded: the amount was already deducted when you refunded it and is not deducted again in Finance or in commissions. Owners and Managers get an alert to check in Mercado Pago that the amount is not deducted twice.",{"id":4216,"title":4217,"titles":4218,"content":4219,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-my-mercado-pago-account-is-from-another-country-or-currency","What happens if my Mercado Pago account is from another country or currency?",[226],"Fiuit does not create payment links with that account and payments stay manual, so no customer pays in a currency other than your business's. Finance → Charges explains it: connect an account from the project's country or fix the currency in My business → Details.",{"id":4221,"title":4222,"titles":4223,"content":4224,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-send-a-customer-a-payment-link-for-what-they-owe","Can I send a customer a payment link for what they owe?",[226],"Yes, with a Mercado Pago account from Brazil or Argentina connected. In the task, Payment section, tap Charge with link: Fiuit creates a link for the balance (never for a typed amount) and sends it in the customer’s conversation or copies it. It expires after 48 hours and the payment shows up automatically when they pay.",{"id":4226,"title":4227,"titles":4228,"content":4229,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-i-send-the-link-twice-or-the-balance-changes","What happens if I send the link twice or the balance changes?",[226],"If the amount is the same, the same link is reused: the customer never gets two links for the same thing. If the balance changed and a link for the previous amount is still open, Fiuit does not create another: wait for it to expire or record the payment by hand.",{"id":4231,"title":4232,"titles":4233,"content":4234,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-the-link-if-i-cancel-the-task","What happens to the link if I cancel the task?",[226],"It is voided right away, in Mercado Pago too. If the customer still managed to pay it (for example, with a Pix they had already generated), the payment becomes customer credit and the charge goes to review: Owner and Manager get an alert to decide whether to refund it or use it for another debt.",{"id":4236,"title":4237,"titles":4238,"content":4239,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#why-does-it-ask-for-the-payment-method-every-time-i-record-a-payment","Why does it ask for the payment method every time I record a payment?",[226],"Because every payment you record by hand (for a task or its deposit, on the customer account, when selling a package or club or collecting its fee, or when advancing a stage) uses the same form: you pick cash, card, transfer, Pix (in reais), Mercado Pago or other, and it records who collected it, how much and how. That keeps the cash box and reports in sync. The deposit is no longer marked as paid by editing the task: collect it in the Payment section.",{"id":4241,"title":4242,"titles":4243,"content":4244,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-a-member-doesnt-pay-the-membership","What happens if a member doesn't pay the membership?",[226],"It shows in red on their page and in Today, Owner and Manager get a notice and the plan's grace days start (7 by default). If you collect with a Mercado Pago link, the member gets the payment link in their conversation when it becomes unpaid and every 3 days. If the membership is billed to a card and the charge fails, the member gets «We couldn't charge your membership» with the month's link to pay with another card or by hand, and the automatic charge is retried anyway; each month is charged only once: if they pay by link or by hand and the automatic retry still goes through, that charge is flagged for review so you can refund it (we let you know), and if the retry goes through first, the month's link is voided. The card stays saved for the following months. When the grace period ends the membership is blocked: its services are no longer covered and the member can't make new bookings of those services (through the bot, the panel or the API) until the fee is settled.",{"id":4246,"title":4247,"titles":4248,"content":4249,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#how-is-a-blocked-membership-unblocked","How is a blocked membership unblocked?",[226],"By itself, on payment: once the month's task (or all unpaid ones) is paid or you waive it, it is up to date again and covers its services. Nobody blocks or unblocks it by hand, and cancelling is always possible. Grace days are changed on the plan (My business → Catalog → plan → Subscribers).",{"id":4251,"title":4252,"titles":4253,"content":4254,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-my-project-is-awaiting-payment","What happens if my project is «Awaiting payment»?",[226],"Fiuit did not receive your plan's payment (or you cancelled) and the 14 days with reminders ran out: everything is blocked except paying and cancelling: the panel shows only the payment screen (Subscription stays open), Wagy stops answering, the team bot (WhatsApp and Telegram) only replies that the account is awaiting payment, with the link, and your API keys (and MCP) get a payment-pending error. The bot keeps serving your customers, but takes no new bookings (neither does web booking) and automations pause. No data is deleted. As soon as the payment arrives, the panel goes back to normal by itself.",{"id":4256,"title":4257,"titles":4258,"content":4259,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-my-whatsapp-if-my-project-is-awaiting-payment","What happens to my WhatsApp if my project is «Awaiting payment»?",[226],"During the grace period the bot keeps serving on WhatsApp. If it is still unpaid after 7 days, your WhatsApp is disconnected; your conversations, customers and history stay intact. We let you know 3 days before and on the day of the cut, and the panel notice shows the date. After paying, connect it again in Customer care → Channels → WhatsApp: tap Reconnect and scan the QR code.",{"id":4261,"title":4262,"titles":4263,"content":4264,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-my-customers-place-an-order-or-a-complaint-if-my-project-is-awaiting-payment","Can my customers place an order or a complaint if my project is «Awaiting payment»?",[226],"No: just like bookings, while your project is «Awaiting payment» no product orders or requests such as complaints or quotes are created, through any channel. The bot replies that it can't take new requests there for now and offers to call someone from the team, without mentioning the payment. As soon as the payment arrives, it takes them again by itself.",{"id":4266,"title":4267,"titles":4268,"content":4269,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#when-does-my-plan-change-if-i-pay-for-it-with-fiuit","When does my plan change if I pay for it with Fiuit?",[226],"When Fiuit confirms your payment: that's when the plan you chose is activated, with its limits and AI usage. An error on our side never changes your plan or blocks you.",{"id":4271,"title":4272,"titles":4273,"content":4274,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-i-cancel-or-dont-pay-my-fiuit-plan","What happens if I cancel or don't pay my Fiuit plan?",[226],"You get 14 days in which everything keeps working (if you cancel, they start when the period you already paid ends). Meanwhile you see a banner with «Pay now», Wagy reminds you and we notify you by email and Telegram at the start, halfway, 3 days before and on the last day. If it runs out unpaid, the panel shows only the payment screen, the bot keeps serving your customers but takes no new orders, and automations pause. No data is deleted and your plan does not change, and as soon as you pay everything is back instantly.",{"id":4276,"title":4277,"titles":4278,"content":4279,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#how-do-i-see-which-customers-have-an-unpaid-club-or-membership","How do I see which customers have an unpaid club or membership?",[226],"Today shows a red alert (for Owner and Manager) with each unpaid customer, their plan and, for a club, how many months they owe; tap the row to open their page. You can also open a plan in My business → Catalog and use «Unpaid» under Subscribers. Viewing them does not change benefits.",{"id":4281,"title":4282,"titles":4283,"content":4284,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-automatically-remind-a-customer-that-their-club-is-unpaid","Can I automatically remind a customer that their club is unpaid?",[226],"Yes: in Customer care → Automatic messages → «Recommended for your business» turn on «Unpaid club reminder». It writes to the customer in their conversation, once per month owed, and respects the channel's 24 h window, quiet hours (21:00 to 08:00) and customers who asked not to receive notices. It starts off until you turn it on; memberships don't use it because they already get their payment link.",{"id":4286,"title":4287,"titles":4288,"content":4289,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-the-tasks-amount-if-i-reschedule-it","What happens to the task's amount if I reschedule it?",[226],"If you adjusted the amount by hand (or it changed because the order changed), the task keeps it, with its reason, when you move it to another time or day and when you stretch or shorten it. If it had the service price with no adjustment, it takes the service's current price; if a package or club covers it, the plan rules. You see it in the task's Payment section.",{"id":4291,"title":4292,"titles":4293,"content":4294,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#does-a-plan-cover-a-task-again-if-i-reschedule-after-removing-it","Does a plan cover a task again if I reschedule after removing it?",[226],"No. If you chose Remove plan, the replacement stays outside the plan, even after several reschedules. Changing the time does not undo your billing decision. Check Work, in the task’s Payment section.",{"id":4296,"title":4297,"titles":4298,"content":4299,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-amount-is-charged-if-i-remove-the-plan-after-rescheduling","What amount is charged if I remove the plan after rescheduling?",[226],"The amount agreed before the plan applies, rather than the current service price: an adjustment to 2000 stays at 2000. This also applies when the new time is outside coverage. Check Work, in the task’s Payment section.",{"id":4301,"title":4302,"titles":4303,"content":4304,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-a-customer-wants-to-pay-by-chat-and-i-dont-have-mercado-pago","What happens if a customer wants to pay by chat and I don't have Mercado Pago?",[226],"If chat payment is set to «Ask how to pay» and you entered your payment details (bank transfer or Pix) in Finance → Charges → Chat payment, the bot shows them to the customer with the order total. When the customer writes «I paid», you get the «Customer says they paid» alert (once per order): check that the money came in and record the payment on the task. It's never recorded by itself. With no details entered, the customer pays on delivery.",{"id":4306,"title":4307,"titles":4308,"content":4309,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-charge-a-customer-who-orders-by-chat-in-advance","Can I charge a customer who orders by chat in advance?",[226],"Yes, with a ready Mercado Pago account. On the service form, under Chat payment, you choose what the bot does when the customer confirms the order: pay on delivery (as always), ask how they want to pay, or send the payment link. Fiuit calculates the amount from the order total and, once paid, the customer gets «We received your payment» and the task shows as paid.",{"id":4311,"title":4312,"titles":4313,"content":4314,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-the-customer-doesnt-pay-the-order-link","What happens if the customer doesn't pay the order link?",[226],"The link expires after 24 hours. Depending on what you chose for the service, the order stays as «pay on delivery» or is cancelled, and the customer gets a single message explaining why and offering to order again. An order that was already delivered is never cancelled because of this.",{"id":4316,"title":4317,"titles":4318,"content":4319,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-the-link-if-the-order-total-changes","What happens to the link if the order total changes?",[226],"The old link is voided so nobody pays an amount that no longer applies, and the bot sends the customer a new one for the current total. The task shows «Link voided because the total changed»; if you sent it yourself, tap Charge right there to send a new one.",{"id":4321,"title":4322,"titles":4323,"content":4324,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#where-do-i-choose-the-default-chat-payment-rule","Where do I choose the default chat payment rule?",[226],"In Finance → Charges → Chat payment, choose pay on delivery, ask or send a link, with preparation and expiry options. Services inherit this rule; on each service form, choose a custom rule or return to “Use business default”. Existing businesses keep payment on delivery until you change it.",{"id":4326,"title":4327,"titles":4328,"content":4329,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-charge-the-customers-card-from-the-panel","Can I charge the customer's card from the panel?",[226],"Yes, if you are an Owner or Manager and the customer is present or on the phone. On the task, under Payment, tap Card: Mercado Pago's secure form opens for the balance. Mercado Pago receives the card details; Fiuit never sees or stores them.",{"id":4331,"title":4332,"titles":4333,"content":4334,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-the-card-is-declined-or-mercado-pago-does-not-answer","What happens if the card is declined or Mercado Pago does not answer?",[226],"If it is declined, you see the reason and can try another card: nothing was charged. If Mercado Pago does not answer, the charge stays «checking» and you cannot charge again until the result is known; if there is no payment after half an hour, it counts as not charged.",{"id":4336,"title":4337,"titles":4338,"content":4339,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-the-link-if-i-charge-a-card","What happens to the link if I charge a card?",[226],"Charging a card voids the task's open link or QR, so the customer cannot pay twice. If a payment for a voided link still arrives, it stays as customer credit and the team reviews it.",{"id":4341,"title":4342,"titles":4343,"content":4344,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-charge-with-a-qr-code-at-the-door-or-the-counter","Can I charge with a QR code at the door or the counter?",[226],"Yes, with a Brazil or Argentina Mercado Pago account connected. On the task, under Payment, tap Charge with QR: a full-screen QR code for the balance appears and, when the customer pays with Mercado Pago or their bank app, the screen shows Paid! and the payment is recorded on the task. The code expires after 15 minutes.",{"id":4346,"title":4347,"titles":4348,"content":4349,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-the-link-if-i-charge-with-qr","What happens to the link if I charge with QR?",[226],"Requesting the QR code voids the task's open link, so the customer cannot pay twice. No link is created while a QR code is open. If a payment for a voided link or QR still arrives, it becomes customer credit and the team reviews it.",{"id":4351,"title":4352,"titles":4353,"content":4354,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#why-dont-i-see-charge-with-qr","Why don't I see «Charge with QR»?",[226],"Mercado Pago needs the business address with its map location to charge with QR. Add it in My business → Details; Finance → Charges shows whether QR is available and, if not, why.",{"id":4356,"title":4357,"titles":4358,"content":4359,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#is-the-customer-reminded-before-the-payment-link-expires","Is the customer reminded before the payment link expires?",[226],"Only if you turn it on. In the service, under Chat payment, turn on «Remind the customer before it expires»: 3 hours before, a single message with the link is sent, only if they haven't paid yet (never if they paid, the link was voided or the order was cancelled), in their language and not at night. The same option is in Finance → Charges → Chat payment for the whole business.",{"id":4361,"title":4362,"titles":4363,"content":4364,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-charge-with-my-point-terminal-from-the-task","Can I charge with my Point terminal from the task?",[226],"Yes, with a Point Smart terminal and a Brazil or Argentina Mercado Pago account. Link it in Finance → Charges → Point terminal; then, in the task's Payment section, tap Charge with Point: the terminal receives what is still owed and the customer pays there by card, QR or Pix. The payment is recorded on the task once Mercado Pago confirms it.",{"id":4366,"title":4367,"titles":4368,"content":4369,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-if-i-cancel-a-point-charge-while-the-customer-is-already-paying","What happens if I cancel a Point charge while the customer is already paying?",[226],"Fiuit asks Mercado Pago to cancel it and does not send another charge until that is confirmed. If the payment still arrives, it is not lost: it becomes customer credit and the team reviews it.",{"id":4371,"title":4372,"titles":4373,"content":4374,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#why-cant-i-change-the-point-terminal","Why can't I change the Point terminal?",[226],"Because there is an open charge on that terminal. Once it is paid, cancelled or expires (15 minutes), you can change or unlink it in Finance → Charges.",{"id":4376,"title":4377,"titles":4378,"content":4379,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-charge-the-full-amount-when-an-appointment-is-booked","Can I charge the full amount when an appointment is booked?",[226],"Yes. On the service sheet, under Charge when booking, choose Don't charge, Deposit or Full amount. With Full amount, the booking waits for the full payment and is confirmed once it clears; if they don't pay in time the slot is released and, if they cancel early, it is refunded according to your cancellation window. In Finance → Charges you see what each service charges.",{"id":4381,"title":4382,"titles":4383,"content":4384,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#why-cant-i-paste-my-mercado-pago-token","Why can't I paste my Mercado Pago token?",[226],"In Chile, Uruguay, Colombia, Mexico and Peru the account is connected by pasting its token, but Fiuit enables it country by country. Until it is enabled in your country, Finance → Charges says it is not available yet and payments are recorded by hand. If you already had an account connected, it stays visible and you can disconnect it.",{"id":4386,"title":4387,"titles":4388,"content":4389,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-delete-or-correct-an-expense","Can I delete or correct an expense?",[226],"It is not deleted: it is voided with a reason, recording who and when. While it is current you can correct it and every change is recorded. Team commissions are not entered as an expense: Fiuit calculates them on its own.",{"id":4391,"title":4392,"titles":4393,"content":4394,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-the-expenses-my-team-records","What happens to the expenses my team records?",[226],"They stay pending until the Owner or a Manager approves them: until then they do not count toward the result. If they are rejected, they keep the reason and do not count either. Nobody approves an expense they recorded, and each team member only sees their own.",{"id":4396,"title":4397,"titles":4398,"content":4399,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-organize-my-expenses-with-my-own-tags","Can I organize my expenses with my own tags?",[226],"Yes. When you record an expense, type one or more tags («van», «downtown store»); new ones are created right there. A tag remembers the last category you used it with and fills it in next time (you can change it). In Finance → Transactions you filter by tag and see «expenses with this tag»; an expense can have several, so those totals don't add up with each other.",{"id":4401,"title":4402,"titles":4403,"content":4404,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-rename-an-expense-category","Can I rename an expense category?",[226],"No: categories are fixed because the result and the cash flow come from them. To organize things your way, use tags; in Finance → Transactions → Expenses → Tags you rename, merge or delete them (deleting a tag doesn't delete expenses).",{"id":4406,"title":4407,"titles":4408,"content":4409,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#do-i-get-a-notice-when-someone-on-the-team-records-an-expense","Do I get a notice when someone on the team records an expense?",[226],"Yes: the Owner and every Manager get a notice by Telegram, WhatsApp or email with the amount and category (never the note). Whoever recorded it does not get it, and if someone already approved or rejected it, it is not sent. You mute it in My account → Notifications.",{"id":4411,"title":4412,"titles":4413,"content":4414,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#does-the-bot-tell-customers-if-they-lose-their-deposit-when-cancelling","Does the bot tell customers if they lose their deposit when cancelling?",[226],"Yes. If they cancel by chat a booking whose deposit was paid through Mercado Pago, the YES or NO question already says whether the deposit is refunded or kept, with the amount, following the service's cancellation window; once cancelled, the bot repeats it. If they ask «if I cancel, do I get my deposit back?», the bot answers the same without cancelling. Cancelling is never blocked. The window is set on each service.",{"id":4416,"title":4417,"titles":4418,"content":4419,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#how-is-what-i-have-left-calculated","How is what I have left calculated?",[226],"Left is what came in minus what went out in the period. In is what was collected minus refunds (no voided, test or under-review payments). Out is approved expenses, the team commissions Fiuit calculates on its own from what was collected, and Mercado Pago and Fiuit payment fees. Expenses with no resource stay as «General», not split. If money came in and you recorded no expenses, Fiuit warns that the result may be inflated.",{"id":4421,"title":4422,"titles":4423,"content":4424,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-do-i-send-my-accountant","What do I send my accountant?",[226],"In Finance → Summary tap «Export for the accountant»: pick the period and download an Excel file with the summary, every movement and the totals by category, resource and service, commissions and electronic payments, or a CSV with just the movements. They are the same numbers as the result. Fiuit does not issue tax documents: the file is an aid for your accountant.",{"id":4426,"title":4427,"titles":4428,"content":4429,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#why-does-wagy-ask-me-to-confirm-an-expense-twice","Why does Wagy ask me to confirm an expense twice?",[226],"When the amount is large for your business (from twice what you pay per month for your plan) or you already recorded the same one that day, Wagy asks you to confirm it with a button before showing you the expense to confirm. That way a misunderstood amount or a repeated message doesn't get into your result. Other expenses are confirmed once. You see it afterwards in Finance → Transactions.",{"id":4431,"title":4432,"titles":4433,"content":4434,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-keep-the-photo-of-an-expense-receipt","Can I keep the photo of an expense receipt?",[226],"Yes: one photo or PDF per expense. Fiuit does not read it; the amount is entered by hand. Uploading another one replaces the previous one and the change stays in the expense history.",{"id":4436,"title":4437,"titles":4438,"content":4439,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-record-an-expense-that-repeats-every-month","Can I record an expense that repeats every month?",[226],"Yes: you create it once, every week or every month on its day, and Fiuit records it by itself on each date, only once. You can pause it, skip the next date or end it; what was already recorded does not change. A fixed salary is a recurring expense in «Salaries».",{"id":4441,"title":4442,"titles":4443,"content":4444,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-charge-a-task-in-parts-for-example-among-several-players","Can I charge a task in parts, for example among several players?",[226],"Yes. In the task's Payment section tap Charge a part, enter the amount and choose link, QR, Point or manual; repeat it for each part. All open parts together never go over the balance, and the task is paid when the last one comes in.",{"id":4446,"title":4447,"titles":4448,"content":4449,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-the-parts-if-the-total-goes-down-or-someone-pays-too-much","What happens to the parts if the total goes down or someone pays too much?",[226],"If the total goes down and an open part no longer fits, that part is voided and the notice stays on the task; the others stay. If someone pays too much, the extra stays in the customer's favor, like any payment.",{"id":4451,"title":4452,"titles":4453,"content":4454,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-the-commission-if-i-refund-a-payment-from-another-month","What happens to the commission if I refund a payment from another month?",[226],"The commission is deducted in the month of the original payment, not the month of the refund; the refunded money is deducted on the day you refund it. The refund month shows a notice, for example «Refund of a September payment: deducted from September». If September was already settled, it does not change: the deduction becomes an automatic adjustment on the first unsettled day.",{"id":4456,"title":4457,"titles":4458,"content":4459,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-i-correct-a-commission-that-is-already-settled","Can I correct a commission that is already settled?",[226],"A settlement is never rewritten. If a payment is later voided or refunded, or a rule changes backwards, the difference shows up as an automatic adjustment on the first unsettled day and goes into the next settlement. A manual adjustment goes on a day you have not settled yet.",{"id":4461,"title":4462,"titles":4463,"content":4464,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#how-do-i-send-my-accountant-the-receipts-and-a-summary-to-sign","How do I send my accountant the receipts and a summary to sign?",[226],"In Finance → Summary tap «Export for the accountant» and choose «Accountant package (ZIP)»: it includes the spreadsheet, a one-page PDF summary to sign and the photos of the period's approved expense receipts, each named with the date, amount and category. If it's large, we put it together separately and let you know when it's ready; it stays 48 hours under «Ready packages». If you only want the page to sign, choose «PDF summary».",{"id":4466,"title":4467,"titles":4468,"content":4469,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-the-open-link-or-qr-if-the-customer-pays-part-of-it-another-way","What happens to the open link or QR if the customer pays part of it another way?",[226],"A charge is never left open for more than what is owed. If the bot already sent the link, it sends a new one for what is left. A link, QR or Point the team created is voided and the task says \"another payment came in and the balance changed\"; tap Charge to create a new one. A card payment in progress is not touched.",{"id":4471,"title":4472,"titles":4473,"content":4474,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#does-fiuit-issue-my-invoices","Does Fiuit issue my invoices?",[226],"No. Each business issues with its own provider. In My business → Details → Tax details the Owner sets the regime or condition and whether they issue invoices; with that on, the customer record asks for their tax details.",{"id":4476,"title":4477,"titles":4478,"content":4479,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#what-happens-to-the-invoice-if-i-refund-a-charge","What happens to the invoice if I refund a charge?",[226],"The invoice is never deleted. If the charge already had an invoice from your provider, a pending credit note for the refunded amount is left for you to issue.",{"id":4481,"title":4482,"titles":4483,"content":4484,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fsenas-y-reservas#can-my-customer-pay-from-the-tracking-link","Can my customer pay from the tracking link?",[226],"Yes, if you turn on Allow payment on their link (on the customer profile, Share) and while their order has an open payment link: the one the bot sent when confirming, or the one you sent with Charge. On their tracking page they see Pay with the amount and how long it is valid, and pay on Mercado Pago. Once they pay, the link expires or you void it, the button goes away. It is off by default and independent of «Show balance»; each order shows only its own link.",{"id":231,"title":230,"titles":4486,"content":4487,"level":257},[],"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":4489,"title":4490,"titles":4491,"content":4492,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-meta-rejects-one-of-my-notice-templates","What happens if Meta rejects one of my notice templates?",[230],"Other templates continue through review. In Customer care → Channels → WhatsApp → Official WhatsApp, you can see the reason for the last attempt; if all fail, an error shows Meta's code. After resolving the cause, submit again to retry the drafts. Meta decides whether to approve new notices.",{"id":4494,"title":4495,"titles":4496,"content":4497,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-an-official-whatsapp-notice-has-no-approved-template","What happens if an official WhatsApp notice has no approved template?",[230],"With official WhatsApp, if the customer hasn't written in the last 24 hours, Meta only allows notices with an approved template. Every automatic notice has its own (bookings, changes and cancellations, orders and deliveries, payments, reviews and reactivation). If the template isn't approved yet, the notice is not sent, the conversation is flagged for your team and in Channels → WhatsApp → Official WhatsApp you see how many notices didn't go out and which template still needs approval. Reactivation and the thank-you for the visit are marketing: they only go out if you authorize them with their own maximum per message. QR WhatsApp has no templates and nothing changes.",{"id":4499,"title":4500,"titles":4501,"content":4502,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-i-turn-on-a-recommended-reminder","What happens if I turn on a recommended reminder?",[230],"Recommended reminders are installed off. No reminder writes to a customer until you turn it on with its switch in Customer care → Automatic messages. Each reminder shows its latest sends with the status and the reason if one failed.",{"id":4504,"title":4505,"titles":4506,"content":4507,"level":263},"\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?",[230],"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":4509,"title":4510,"titles":4511,"content":4512,"level":263},"\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?",[230],"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":4514,"title":4515,"titles":4516,"content":4517,"level":263},"\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?",[230],"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":4519,"title":4520,"titles":4521,"content":4522,"level":263},"\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?",[230],"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 Customer care → Automatic messages, where you also see the log of what was sent and what was skipped.",{"id":4524,"title":4525,"titles":4526,"content":4527,"level":263},"\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?",[230],"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":4529,"title":4530,"titles":4531,"content":4532,"level":263},"\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?",[230],"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 → Plan once you checked what happened.",{"id":4534,"title":4535,"titles":4536,"content":4537,"level":263},"\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?",[230],"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":4539,"title":4540,"titles":4541,"content":4542,"level":263},"\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?",[230],"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":4544,"title":4545,"titles":4546,"content":4547,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#does-disconnecting-instagram-delete-customer-data","Does disconnecting Instagram delete customer data?",[230],"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":4549,"title":4550,"titles":4551,"content":4552,"level":263},"\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?",[230],"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 My business → Team and resources → person profile. Telegram cannot guarantee avoiding a duplicate post if the connection drops immediately after sending.",{"id":4554,"title":4555,"titles":4556,"content":4557,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#where-does-my-customers-photo-come-from","Where does my customers' photo come from?",[230],"When a customer writes on Telegram or Instagram, their profile photo shows up on its own and is refreshed from time to time. WhatsApp does not share it: their initials are shown and you can upload one from their profile in Customers.",{"id":4559,"title":4560,"titles":4561,"content":4562,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-i-change-or-remove-a-customers-photo","What happens if I change or remove a customer's photo?",[230],"A photo you pick by hand is never replaced by the channel. If you remove it, initials are shown and it does not come back until you choose Use the channel photo in the customer profile.",{"id":4564,"title":4565,"titles":4566,"content":4567,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#who-sees-my-customers-photo","Who sees my customers' photo?",[230],"Only your team, in the panel and the Mini App (each team member, for their own customers). It never shows up in the customer portal, public links or integrations.",{"id":4569,"title":4570,"titles":4571,"content":4572,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#where-do-my-customers-names-come-from","Where do my customers' names come from?",[230],"From the channel they write on: the name on their WhatsApp, Telegram or Instagram profile (or their @username if they have no name), plus their number or @username so you can find them in Customers. It only fills in what is missing: a name you type by hand is never replaced. If Instagram does not share it, the Customer care → Channels → Instagram screen says so.",{"id":4574,"title":4575,"titles":4576,"content":4577,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-if-a-customer-writes-to-me-on-both-telegram-and-whatsapp","What if a customer writes to me on both Telegram and WhatsApp?",[230],"If they share their own contact on Telegram (or write on WhatsApp from the number they already shared), both conversations end up on a single profile without you doing anything. Owners and Managers get the «Customer linked across channels» notice with the customer's name, which opens their profile; turn it off or change its channel in My account → My notices. Someone else's contact card never links profiles.",{"id":4579,"title":4580,"titles":4581,"content":4582,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-if-the-customer-came-in-through-the-site-form-or-chat-and-has-no-whatsapp","What if the customer came in through the site form or chat and has no WhatsApp?",[230],"The stage notice first looks for another conversation of theirs with an outgoing channel (for example their WhatsApp). If there is none, it goes by email, with the same text and in their language, to the address they left in the form or that is on their profile. With no channel and no email nothing is sent and the notice log shows it as skipped. If the project has no outgoing email configured, it is skipped too.",{"id":4584,"title":4585,"titles":4586,"content":4587,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#why-werent-two-profiles-of-the-same-customer-merged","Why weren't two profiles of the same customer merged?",[230],"They only merge on their own with a phone the channel guarantees: the WhatsApp number or the person's own contact shared on Telegram (Owners and Managers then get the «Customer linked across channels» notice). A phone the person types, someone else's contact card or an @username is not enough: the profile shows the match under Identities and matches so an Owner or Manager can review and confirm the merge.",{"id":4589,"title":4590,"titles":4591,"content":4592,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#can-i-change-what-the-bot-writes-to-the-customer-at-each-stage","Can I change what the bot writes to the customer at each stage?",[230],"Yes, in My business → Stages: when you edit a stage, «Customer message on entry» lets you write your own text per language, with data Fiuit fills in (name, service, date and time, amount, link). Only the Owner saves; what was saved is what goes out, the AI doesn't rewrite it.",{"id":4594,"title":4595,"titles":4596,"content":4597,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-if-the-customer-speaks-a-language-i-didnt-write-the-message-in","What if the customer speaks a language I didn't write the message in?",[230],"They get the template's text in their language. The same goes if the text uses a detail that task doesn't have (for example, a customer without a name): a message with holes never goes out.",{"id":4599,"title":4600,"titles":4601,"content":4602,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#i-edited-a-stages-message-does-it-change-tasks-already-in-progress","I edited a stage's message: does it change tasks already in progress?",[230],"A task that already entered the stage and has its notice about to go out keeps the text it entered with. Tasks that enter later use the new text.",{"id":4604,"title":4605,"titles":4606,"content":4607,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#which-team-receives-my-inquiry-on-the-fiuit-website","Which team receives my inquiry on the Fiuit website?",[230],"The selected or detected country determines which team receives contact forms: Argentina and Brazil have local teams; other countries go to the global team. Without a confirmed country, with an unknown country, on detection failure or while detection is pending, submissions go to the global team, including in Portuguese. Argentine presentations always go to Argentina and Brazilian presentations to Brazil.\nChat uses the country from initial detection until the page is reloaded. Forms follow the selector; a missing local destination falls back to global. If that is also unavailable, they show alternative contact details or an error without claiming receipt.",{"id":4609,"title":4610,"titles":4611,"content":4612,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-does-the-assigned-notice-say-if-i-book-a-court-or-a-place","What does the \"assigned\" notice say if I book a court or a place?",[230],"It names the court or place (\"Your Corte request is set for Court 1.\"). It only says \"someone\" when a team member was assigned. You see and edit it under My business → Rules or in the service notices.",{"id":4614,"title":4615,"titles":4616,"content":4617,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#how-do-i-turn-on-or-off-all-the-notifications-of-a-topic","How do I turn on or off all the notifications of a topic?",[230],"In My account → My notices each topic (Conversations, Tasks, Money and System) starts collapsed and has one checkbox per channel: tapping it turns all the topic's notifications on or off for that channel. If they are mixed, the checkbox shows as indeterminate and one tap turns them all on. Open the topic to pick one by one. A channel you can't use yet, like an unlinked Telegram, shows as disabled with the reason and the topic checkbox leaves it alone. You only see types available to your role; empty groups are hidden and saving preserves preferences you cannot see.",{"id":4619,"title":4620,"titles":4621,"content":4622,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#where-is-each-notice-set-up-and-who-does-it-go-to","Where is each notice set up and who does it go to?",[230],"Notices to your customers are in Customer care → Automatic messages; team notices are in Settings → Team notices; your own are in My account → My notices. When you choose who receives a team notice, the options are always the same: Owner, Owner and managers, The whole team and Whoever has the task.",{"id":4624,"title":4625,"titles":4626,"content":4627,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#who-gets-the-notice-when-a-task-is-created-completed-rescheduled-or-cancelled","Who gets the notice when a task is created, completed, rescheduled or cancelled?",[230],"Owner and Manager get all four; whoever has the task assigned also gets rescheduled and cancelled. Nobody is notified of what they did themselves, and staff never hear about someone else's tasks. By default they arrive in the bell and by push; rescheduled and cancelled also by Telegram and email. Each person adjusts them in My account → Notices and the Owner can turn each type off for the whole project.",{"id":4629,"title":4630,"titles":4631,"content":4632,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#why-am-i-not-notified-about-a-task-i-created-or-completed-myself","Why am I not notified about a task I created or completed myself?",[230],"Because you already know: task notices are not sent to whoever did the action.",{"id":4634,"title":4635,"titles":4636,"content":4637,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#is-there-a-notice-if-i-delete-a-task","Is there a notice if I delete a task?",[230],"Tasks are not deleted today, they are cancelled, and that does notify.",{"id":4639,"title":4640,"titles":4641,"content":4642,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-a-notice-uses-a-room-link-but-the-room-has-no-meeting-link","What happens if a notice uses a room link but the room has no meeting link?",[230],"The standard notice is sent without gaps. Add an HTTPS link in Team and resources and use the meeting link variable in the stage message. With assigned rooms that have different links, the standard notice is also sent.",{"id":4644,"title":4645,"titles":4646,"content":4647,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-i-delete-all-my-notifications","What happens if I delete all my notifications?",[230],"In the bell, choose “Delete all” and confirm: your notifications for that project are cleared. Other people's notifications, other businesses' notifications and the audit log stay as they are, and new notifications keep arriving. It can't be undone.",{"id":4649,"title":4650,"titles":4651,"content":4652,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#can-fiuit-pause-my-projects-ai","Can Fiuit pause my project's AI?",[230],"Yes. The Fiuit team can pause it, for example after unusual spending: it is the same pause you use, so the bot keeps replying with a fixed text, no AI is spent and you see the notice in the panel. You resume it in Settings → Plan.",{"id":4654,"title":4655,"titles":4656,"content":4657,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#can-i-join-two-profiles-of-the-same-customer-even-if-they-dont-match-exactly","Can I join two profiles of the same customer even if they don't match exactly?",[230],"Yes. On the profile, More actions → Unify with…: search the other one by name, phone or email, see both side by side, choose which detail stays where they differ and confirm (Owner or Manager). Tasks, conversations from every channel, comments, attachments and addresses move to the profile you keep; tags are combined, and the bot recognizes the person on any of their channels. In Customers, the «possible duplicates» notice gathers profiles with the same phone or email, or a very similar name and the same number, to review one by one. A match doesn't verify the person. It can't be undone and doesn't apply yet to profiles with charges; if the one being merged has packages or clubs, unify the other way round.",{"id":4659,"title":4660,"titles":4661,"content":4662,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#where-do-i-change-the-language-and-contact-support-in-the-dashboard","Where do I change the language and contact support in the dashboard?",[230],"Tap your photo or name at the bottom of the menu to open My account. There you can choose a language or follow the project language, and talk to support when available. Sign out stays beside your name.",{"id":4664,"title":4665,"titles":4666,"content":4667,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#why-do-i-get-one-notification-when-many-tasks-are-completed","Why do I get one notification when many tasks are completed?",[230],"If you would receive more than ten notifications of the same kind in one project within a minute, they are combined into one with the count. Phone, Telegram and email deliveries wait one minute so they can be grouped; longer configured delays are respected. Task notifications open Work, and your preferences remain in My account → My notifications.",{"id":4669,"title":4670,"titles":4671,"content":4672,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Favisos-y-canales#what-happens-if-send-notices-to-customers-is-off-and-a-notice-is-on","What happens if “Send notices to customers” is off and a notice is on?",[230],"None goes out: the general switch stops every customer notice, even if the one on a stage, service or reminder is on. With the general switch on, the most specific wins: each notice goes out only if its own switch is on. You see and change it in Automation → Customer notices, where a held-back row says why.",{"id":235,"title":234,"titles":4674,"content":4675,"level":257},[],"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":4677,"title":4678,"titles":4679,"content":4680,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-i-reply-in-a-conversation","What happens if I reply in a conversation?",[234],"Replying through Inbox, the API or MCP cancels the bot's wait and silences it in that conversation for 2 hours by default. Each reply renews the period, which is configurable per channel. Replies from the phone app do not reach the system. You can view the conversation in Inbox.",{"id":4682,"title":4683,"titles":4684,"content":4685,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-the-bot-wait-for-the-team-to-reply","Can the bot wait for the team to reply?",[234],"Yes: «Human first» sends one acknowledgment per burst and waits 5 minutes (configurable from 1 to 60). Your reply cancels the wait; otherwise, the bot picks up with context and no second greeting. If the customer writes again within 2 hours of the bot's last reply, the bot keeps going; after 2 hours, it waits for the team again. Configure it through the API\u002FMCP; the panel arrives in FIU-517.",{"id":4687,"title":4688,"titles":4689,"content":4690,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#how-does-the-bot-offer-available-times","How does the bot offer available times?",[234],"In a sentence, using “today”, “tomorrow” and short times in the business's time zone. The times and buttons stay the same; customers can reply “the 10 am one” or “tomorrow at noon”. You can view the conversation in Inbox.",{"id":4692,"title":4693,"titles":4694,"content":4695,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#does-the-bot-ask-for-the-day-and-time-again-if-the-customer-gave-them-before-choosing-a-service","Does the bot ask for the day and time again if the customer gave them before choosing a service?",[234],"No: when starting a booking, it recalls up to 6 customer messages from the last 30 minutes, after the last closed booking. With a service, day and time window, it offers times; it asks for confirmation if the window is uncertain. “Tomorrow” keeps the date from the original message even across midnight. You can view the conversation in Inbox.",{"id":4697,"title":4698,"titles":4699,"content":4700,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#why-does-wagy-no-longer-show-the-large-greeting-when-i-open-it","Why does Wagy no longer show the large greeting when I open it?",[234],"Wagy introduces itself only the first time you open it without history for that project and device. Later visits keep the suggestions; existing conversations never show the introduction. On desktop, the chat fills the entire column in the Control panel.",{"id":4702,"title":4703,"titles":4704,"content":4705,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-asks-for-a-person","What happens if the customer asks for a person?",[234],"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":4707,"title":4708,"titles":4709,"content":4710,"level":263},"\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?",[234],"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":4712,"title":4713,"titles":4714,"content":4715,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-confirms-with-new-details","What happens if the customer confirms with new details?",[234],"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":4717,"title":4718,"titles":4719,"content":4720,"level":263},"\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?",[234],"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 Customer care → Bot.",{"id":4722,"title":4723,"titles":4724,"content":4725,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-monthly-ai-quota-runs-out","What happens if the monthly AI quota runs out?",[234],"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 → Plan, with a warning at 80 %.",{"id":4727,"title":4728,"titles":4729,"content":4730,"level":263},"\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?",[234],"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":4732,"title":4733,"titles":4734,"content":4735,"level":263},"\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?",[234],"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":4737,"title":4738,"titles":4739,"content":4740,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-if-i-only-sell-products-and-a-customer-orders-by-chat","What if I only sell products and a customer orders by chat?",[234],"The bot builds the order with the products it offers, shows the summary with the total and, when the customer says yes, creates the task with that amount. It doesn't ask for an address: you arrange delivery or pickup. The task shows up in Today.",{"id":4742,"title":4743,"titles":4744,"content":4745,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#does-wagy-explain-how-fiuits-rules-work","Does Wagy explain how Fiuit's rules work?",[234],"Yes. Ask «what happens if…?» and it looks the rule up in this guide and in the policy registry; it tells you what happens, why and where you see it. If something is not available yet, it says so and does not present it as in force.",{"id":4747,"title":4748,"titles":4749,"content":4750,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-does-the-customer-see-in-their-order-link","What does the customer see in their order link?",[234],"What they ordered, the total, the address while the order is open, the day with the time window (or time) and the status; the map only while it is on its way. They can add it to their calendar, change or cancel it, order again or talk to you. The bot sends the link when it confirms the order and when the customer asks how it is going.",{"id":4752,"title":4753,"titles":4754,"content":4755,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#does-the-bot-send-the-link-again-if-i-revoked-it","Does the bot send the link again if I revoked it?",[234],"No. If you revoked a customer's link, the bot confirms without a link until you share it again from Share in the task or the customer's profile.",{"id":4757,"title":4758,"titles":4759,"content":4760,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#how-does-the-customer-change-or-cancel-from-the-order-link","How does the customer change or cancel from the order link?",[234],"With “Change or cancel”: it opens your chat with the order code written (on Telegram, Instagram or your site's chat, the message is copied for them to paste). Cancelling is never blocked.",{"id":4762,"title":4763,"titles":4764,"content":4765,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#where-does-the-order-go-if-the-bot-offered-an-address-and-the-customer-said-yes","Where does the order go if the bot offered an address and the customer said yes?",[234],"There. If the bot offers an address the customer already used and the customer accepts without giving another, the summary names it and the order goes there.",{"id":4767,"title":4768,"titles":4769,"content":4770,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-asks-for-the-order-tomorrow-afternoon","What happens if the customer asks for the order «tomorrow afternoon»?",[234],"It is written in the order note (you see it in Tasks) and shows in the summary and the confirmation. Your team still sets the exact time.",{"id":4772,"title":4773,"titles":4774,"content":4775,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-does-the-bot-tell-the-customer-when-it-confirms-an-order","What does the bot tell the customer when it confirms an order?",[234],"What they ordered, when, where it goes and the order code, in the customer's language. It never shows the internal service name.",{"id":4777,"title":4778,"titles":4779,"content":4780,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#how-does-a-customer-request-by-chat-a-service-that-has-no-products","How does a customer request, by chat, a service that has no products?",[234],"Like an order: the bot asks the service form's required questions one at a time, then the place if it's at the customer's address, and shows a summary with their answers, the place and the total before the yes. You see it in Tasks, unscheduled until your team books it.",{"id":4782,"title":4783,"titles":4784,"content":4785,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-says-no-to-their-order-summary","What happens if the customer says no to their order summary?",[234],"If the order has no products, nothing is placed and the bot tells them so (\"I don't know\" is not a no). If it has products, the bot asks what they want to change.",{"id":4787,"title":4788,"titles":4789,"content":4790,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#how-does-the-customer-pick-the-address-if-they-have-several-saved","How does the customer pick the address if they have several saved?",[234],"The bot shows one button per address and «Other». On WhatsApp, with more than three options, it shows a list.",{"id":4792,"title":4793,"titles":4794,"content":4795,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-if-the-customer-replies-quoting-a-message-that-names-an-address","What if the customer replies quoting a message that names an address?",[234],"If they write something like «send it to this one» replying to that message, the order goes to that address. Only a message from the same conversation that names an address the customer already used counts.",{"id":4797,"title":4798,"titles":4799,"content":4800,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#which-times-does-the-bot-offer-a-customer-who-asks-for-an-appointment","Which times does the bot offer a customer who asks for an appointment?",[234],"If they ask for an exact time and it is free, the bot holds it for 10 minutes and shows the summary to confirm; if it is taken, it offers the three closest times that day. With a day or a part of the day («tomorrow afternoon») it offers three spread-out times, and if that day is full it asks for another. Service, day and time can also be chosen with buttons.",{"id":4802,"title":4803,"titles":4804,"content":4805,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-changes-the-time-before-confirming","What happens if the customer changes the time before confirming?",[234],"The bot releases the previous time and shows a new summary with the new time. A yes only confirms the last summary the customer saw.",{"id":4807,"title":4808,"titles":4809,"content":4810,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-asks-for-another-day-for-an-order-that-has-no-time-yet","What happens if the customer asks for another day for an order that has no time yet?",[234],"The bot doesn't set the day of an order: it says the team will arrange the new day and hands the conversation to a person (after hours, it stays in «Needs attention» and the bot says when the team is back). The order doesn't change; the requested day is in the conversation, in the Inbox.",{"id":4812,"title":4813,"titles":4814,"content":4815,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-does-the-bot-ask-the-customer-if-the-service-has-a-form","What does the bot ask the customer if the service has a form?",[234],"After the time is chosen, only the required fields meant for the customer, one at a time and with buttons when the field has options. Team fields are never asked; anything invalid is asked again. The answers are stored in the booking (Calendar). What the customer already said when asking for the booking (\"a first visit tomorrow at 10, with Swiss Medical\") is not asked again: it shows in the summary before the yes (F3-450).",{"id":4817,"title":4818,"titles":4819,"content":4820,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#how-does-the-bot-ask-for-the-address-of-a-home-service-booking","How does the bot ask for the address of a home-service booking?",[234],"It holds the time for 10 minutes and asks for the place: at the business or at home if the service allows both, the saved address (the customer picks if there are several), a typed one or a shared location. If the street exists in several cities, it asks for the city only once. The summary shows the address and, if the customer changes it before saying yes, the bot builds a new summary.",{"id":4822,"title":4823,"titles":4824,"content":4825,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-cancels-halfway-through-a-booking","What happens if the customer cancels halfway through a booking?",[234],"If, while the bot asks for a form field, the address or the yes to the summary, they write \"cancel\", \"no, leave it\" or \"never mind\", the bot releases the time and books nothing. A side question (\"do you take cards?\") is not saved as an answer: the bot answers it and asks again.",{"id":4827,"title":4828,"titles":4829,"content":4830,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-bot-doesnt-understand-the-customer","What happens if the bot doesn't understand the customer?",[234],"If the answer doesn't settle what it asked (for example, “water” when you sell two), it doesn't repeat the same message: it asks again naming the difference (“the 20 L one or the 12 L one?”) and then asks for the option number. If the third answer still makes no progress, it hands the conversation to a person on your team. A message resent right away is not taken twice.",{"id":4832,"title":4833,"titles":4834,"content":4835,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-says-a-quantity-without-naming-the-product","What happens if the customer says a quantity without naming the product?",[234],"The bot keeps it and asks which one, even if the same message asks for something else («I want 3 and one of 20»: it asks which product the 3 are and the 20 stays). If the number is a size in your catalog («I want the 12»), it takes it as that size and asks how many.",{"id":4837,"title":4838,"titles":4839,"content":4840,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-does-the-bot-do-if-a-customer-sends-me-two-locations-at-once","What does the bot do if a customer sends me two locations at once?",[234],"It doesn't pick for them: it asks which one to save as their address, with a button per location and “None”. A single location is saved only if the customer replies yes; you see it on their profile.",{"id":4842,"title":4843,"titles":4844,"content":4845,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-a-scheduled-service-has-optional-products","What happens if a scheduled service has optional products?",[234],"The bot books it without products; you add the products to the task. You see it in Tasks.",{"id":4847,"title":4848,"titles":4849,"content":4850,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-a-scheduled-service-requires-products","What happens if a scheduled service requires products?",[234],"The bot does not book it by chat: it offers the customer to talk to a person. It is booked from the panel or the booking page.",{"id":4852,"title":4853,"titles":4854,"content":4855,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-i-change-a-service-while-a-customer-is-confirming-an-order","What happens if I change a service while a customer is confirming an order?",[234],"If the service now has products or you deactivated it, the bot drops that order and asks the customer to order again; nothing is created. If only the price or the form changed, the bot shows a new summary and waits for another yes.",{"id":4857,"title":4858,"titles":4859,"content":4860,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-bot-fails-in-the-middle-of-a-conversation","What happens if the bot fails in the middle of a conversation?",[234],"Whatever it was doing is undone and the conversation goes to a person: you see it in the Inbox.",{"id":4862,"title":4863,"titles":4864,"content":4865,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#does-the-bot-ask-my-customer-for-what-a-stage-still-needs","Does the bot ask my customer for what a stage still needs?",[234],"Yes. If the task started in a conversation and its stage has items or buttons the customer sees, the bot asks for them in that chat, one by one, and moves the task on at the end. Your team completes signatures and photos. You'll see it in the task's activity as “Customer via chat”.",{"id":4867,"title":4868,"titles":4869,"content":4870,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-my-team-moves-the-task-while-the-customer-is-answering","What happens if my team moves the task while the customer is answering?",[234],"Your team's action wins: the bot says once that the task already moved on and doesn't ask again. After 24 hours in the stage, the bot stops asking.",{"id":4872,"title":4873,"titles":4874,"content":4875,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-my-customer-asks-something-else-while-the-bot-is-asking-for-a-stages-details","What happens if my customer asks something else while the bot is asking for a stage's details?",[234],"The bot answers the question and goes back to the stage's question. If the customer asks three questions in a row without answering it (including the ones the bot answers on its own, like opening hours or prices), or says “no, leave it”, the bot stops asking in that stage without handing the conversation to a person: the bot keeps chatting and the conversation shows up in the Inbox's Needs attention so your team can ask for what's missing.",{"id":4877,"title":4878,"titles":4879,"content":4880,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-when-i-mark-or-on-an-ai-reply","What happens when I mark 👎 or 🐞 on an AI reply?",[234],"We get your mark with that reply’s technical data (not the conversation) to review it. 👎 means “not helpful”; 🐞 means “this is a bug” and alerts the Fiuit team. They’re on every Wagy reply and, in the Inbox, on bot replies (Owner, Manager and collaborator). They’re deleted after 90 days.",{"id":4882,"title":4883,"titles":4884,"content":4885,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-asks-for-the-booking-again-before-confirming","What happens if the customer asks for the booking again before confirming?",[234],"If they repeat the same request, the bot reminds them of the summary and the time stays held for them. If they ask for another time, another professional or another service, the bot searches without releasing the previous time, releases it only once the new one is held (if another customer took it, the previous one stays theirs), says which one it released and shows a new summary: two times are never held at once. A question about another service (\"do you do beards?\", \"any room for a beard on Friday?\") doesn't change the booking even if the bot shows times: it only changes if the customer picks one. If the message both asks and requests (\"can you book me a beard tomorrow at 4pm?\", \"book a beard tomorrow, how much is it?\"), the bot answers what it can and asks whether to change the booking: without a yes, the booking stays. If they say \"cancel\" or \"no\" while choosing, the bot also releases the time they had on hold and tells them.",{"id":4887,"title":4888,"titles":4889,"content":4890,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#how-does-a-customer-ask-to-talk-to-a-person","How does a customer ask to talk to a person?",[234],"With any common phrase: \"I want to talk to a person\", \"connect me with a person\", \"me passa pra um atendente\", \"me podés pasar con alguien?\". It wins over any order or booking in progress and the conversation shows up in the Inbox.",{"id":4892,"title":4893,"titles":4894,"content":4895,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#does-the-bot-remember-what-the-customer-talked-about-yesterday","Does the bot remember what the customer talked about yesterday?",[234],"No: if more than 30 minutes went by since the last message, the bot starts from scratch (like Wagy). The whole conversation stays in the Inbox for your team. If the bot's last message was a question about something halfway done (an order, a booking, a summary waiting for a yes), the bot sees that conversation to understand the answer even if more time went by. An order halfway done is picked up as it was for 2 hours and a booking for 30 minutes; the held time is released after 10 minutes without confirmation, so the bot may need to offer another one. The customer's details (name, addresses, what they usually order) are not lost.",{"id":4897,"title":4898,"titles":4899,"content":4900,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-i-book-courts-or-my-places-capacity-without-adding-people","Can I book courts or my place's capacity without adding people?",[234],"Yes. Add a place with capacity (for example, \"3 cars per slot\") or one court per space, with no people at all. The bot offers the free times and names the court or place without \"with\": \"at 09:00 · Court 1\". You set it up in My business → Team and resources → Places and equipment.",{"id":4902,"title":4903,"titles":4904,"content":4905,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#how-do-my-customers-book-a-full-day-service","How do my customers book a full-day service?",[234],"They pick the day, not the time: the bot offers \"all day\" and tells them from what time they can drop it off. As many fit per day as the spots you serve at once. Today remains available while the place is open; future days respect the advance notice you set in My business → Services. The stay ends at that opening day’s closing time, even if the next day opens immediately afterward. Correcting the address preserves the full day as long as the new zone covers those hours and the same resources and has capacity.",{"id":4907,"title":4908,"titles":4909,"content":4910,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-a-job-isnt-finished-in-the-day","What happens if a job isn't finished in the day?",[234],"If you already started it, it keeps its spot on the following days until you complete it (up to 7 days). With 3 spots and one unfinished car, the next day the bot offers 2. It applies to the place, courts and full-day services, not to an appointment with a person (even if it uses a room or a chair).",{"id":4912,"title":4913,"titles":4914,"content":4915,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-if-a-customer-asks-for-something-outside-the-catalog","What if a customer asks for something outside the catalog?",[234],"The bot can take a request with a flow enabled for customers: it asks for details and shows a summary before creating a task. If unsure, it asks what the customer wants. In Inbox you can see the conversation and its task.",{"id":4917,"title":4918,"titles":4919,"content":4920,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-if-a-customer-asks-for-products-from-two-different-order-types","What if a customer asks for products from two different order types?",[234],"Orders are handled separately, one after another, each with its own summary and confirmation. Each task follows its own process.",{"id":4922,"title":4923,"titles":4924,"content":4925,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-if-the-address-cannot-be-served-at-the-chosen-time","What if the address cannot be served at the chosen time?",[234],"The bot releases that time and keeps the chosen address. Saying yes to looking for another time only shows alternatives; the appointment waits for a yes to the new summary. You can follow the conversation and appointment in Inbox.",{"id":4927,"title":4928,"titles":4929,"content":4930,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-if-the-customer-writes-another-address-while-reviewing-the-order-summary","What if the customer writes another address while reviewing the order summary?",[234],"The bot changes the destination and shows a new summary before asking for another yes. The products stay in the order; you can see the correction and accepted summary in Inbox.",{"id":4932,"title":4933,"titles":4934,"content":4935,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-if-the-customer-asks-dont-you-have-soda-during-an-order","What if the customer asks «don't you have soda?» during an order?",[234],"The bot treats the product as a choice and asks how many they want, without removing products or confirming. It then shows a new summary and waits for a yes; you can follow the conversation in Inbox.",{"id":4937,"title":4938,"titles":4939,"content":4940,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-if-an-audio-message-cannot-be-transcribed-because-of-the-ai-limit-or-a-pause","What if an audio message cannot be transcribed because of the AI limit or a pause?",[234],"The bot explains that it could not listen to the audio and asks for text or options. If an order or appointment is in progress, it repeats the pending question without confirming anything; otherwise, it offers the menu without AI. The conversation stays in bot mode and you can follow it in Inbox.",{"id":4942,"title":4943,"titles":4944,"content":4945,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-if-the-form-asks-for-several-single-letter-options","What if the form asks for several single-letter options?",[234],"Customers can reply «A and B» or separate letters with commas; one letter works if it meets the required minimum. An «a» inside a sentence does not select A. Answers appear in the summary before yes and in the Inbox conversation.",{"id":4947,"title":4948,"titles":4949,"content":4950,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-when-the-project-gets-close-to-its-monthly-ai-limit","What happens when the project gets close to its monthly AI limit?",[234],"From 80 % of the month's AI usage, if the AI is slow, the bot replaces it only with lower-cost options. From 95 %, it does not replace it: if it takes too long, the bot continues with options and rules, without confirming anything the customer did not accept. You see usage in Settings → Plan.",{"id":4952,"title":4953,"titles":4954,"content":4955,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#does-the-bot-send-photos-of-my-products","Does the bot send photos of my products?",[234],"Yes, if the product has a photo: it sends it after the text when it offers products, when it asks «Which one?» and in the order summary, on Telegram and on WhatsApp through the official API. The text with the options does not change and, if a photo fails, the order goes on as usual. You turn it off in Customer care → Bot → Personality.",{"id":4957,"title":4958,"titles":4959,"content":4960,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-does-the-bot-answer-when-a-customer-asks-for-prices","What does the bot answer when a customer asks for prices?",[234],"It shows what your bot offers with its price, the “What the bot sells” link and one question to keep going (book, choose a plan or talk to a person). If they name something specific, it gives that price. A price of 0 with a form shows as “on request”. Set it up in Customer care → Bot.",{"id":4962,"title":4963,"titles":4964,"content":4965,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-does-the-bot-answer-if-the-customer-asks-for-something-it-doesnt-offer","What does the bot answer if the customer asks for something it doesn't offer?",[234],"It never just says \"there is none\": it says what it does offer (bookings, orders or plans, one line per type) and that typing \"human\" passes them to your team. If your bot offers nothing, it offers information about your business or passing them to the team. It shows plans with their price and, to sign up, gives your link or passes them to the team. Set it up in Customer care → Bot.",{"id":4967,"title":4968,"titles":4969,"content":4970,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-does-the-bot-offer-a-customer-who-has-a-task-in-progress","What does the bot offer a customer who has a task in progress?",[234],"Whatever the stage of that task says (“At this stage the bot offers”: everything, some kinds or some items). If they have several, the one waiting for their reply in that chat counts or, otherwise, the most recent. It never offers something your bot doesn't sell or that you turned off for the bot. Set it up in My business → Stages, on each stage, or by asking Wagy («in New, only plans»); in Customer care → Bot, «Your bot offers today» → «At the stage…» shows what a customer sees at each stage.",{"id":4972,"title":4973,"titles":4974,"content":4975,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#is-my-website-published-automatically","Is my website published automatically?",[234],"No. It starts off and its address doesn't exist for anyone (not even Google) until you publish it in Customer care → Website or ask Wagy. While off, it answers like an address that never existed.",{"id":4977,"title":4978,"titles":4979,"content":4980,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#why-doesnt-a-service-show-on-my-website","Why doesn't a service show on my website?",[234],"The website shows exactly what the bot offers: the type must be ticked in «What the bot sells» and the item must have «The bot offers it». Change that and the website changes; its FAQ are the bot's too.",{"id":4982,"title":4983,"titles":4984,"content":4985,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#why-is-my-website-on-fiuitapp-and-not-on-fiuitcom","Why is my website on fiuit.app and not on fiuit.com?",[234],"Business websites live on their own domain, apart from Fiuit's website and panel: that keeps what each business publishes separate from your account. Your address is yourbusiness.fiuit.app and you can see it in Customer care → Website.",{"id":4987,"title":4988,"titles":4989,"content":4990,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-my-customers-pay-their-plan-fee-in-the-chat","Can my customers pay their plan fee in the chat?",[234],"Yes. If they write “I want to pay my fee”, the bot sends the payment link for the pending membership fee for the balance Fiuit calculates (if they already have a valid one, it doesn't send another). Without Mercado Pago, it shows your payment details and an “I paid” button, which only lets you know so you can check the payment. For a club or package fee, or a membership paid by card, the bot states the amount and hands the chat over to you. You see and record the payment on the fee's task.",{"id":4992,"title":4993,"titles":4994,"content":4995,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-a-customer-subscribe-to-a-plan-in-chat","Can a customer subscribe to a plan in chat?",[234],"Yes, to a membership your bot offers. It shows the plan, the monthly price, the first payment (the full price) and the day the next one is due, and the subscription is done when they reply YES in another message. In chat it's always a Mercado Pago subscription, even if you charge it by hand or by link in the panel: the bot asks for the email of their Mercado Pago account and sends the link to authorize the card; the first payment is charged when they authorize it and then every month, automatically. It never sends a one-off payment link. Without card billing active in your project, your team closes the membership. Your website chat doesn't sell plans: their phone has to be verified first. Packages and clubs are closed by your team. You see it on the customer's page.",{"id":4997,"title":4998,"titles":4999,"content":5000,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-a-customer-cancels-their-subscription-in-mercado-pago","What happens if a customer cancels their subscription in Mercado Pago?",[234],"The membership continues until the end of the month they already paid and only then ends; no other month is charged. If they had no paid month in force, it ends right away. You see it on the customer's page, in their membership.",{"id":5002,"title":5003,"titles":5004,"content":5005,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#when-is-the-next-payment-of-a-membership-due","When is the next payment of a membership due?",[234],"On the same day of the next month; if that day doesn't exist, on the last day of the month. Then it goes back to the starting day: a membership that starts on Jan 31 is due on Feb 28, Mar 31 and Apr 30. You see it on the customer's page, in their membership.",{"id":5007,"title":5008,"titles":5009,"content":5010,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-to-the-old-link-if-i-change-my-websites-subdomain","What happens to the old link if I change my website's subdomain?",[234],"It stops working immediately and is not redirected: anyone opening it sees a page that doesn't exist. If the website is published, Fiuit asks you to accept that warning before changing it. You change it in Customer care → Website.",{"id":5012,"title":5013,"titles":5014,"content":5015,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-to-the-usual-booking-link-if-i-publish-my-website","What happens to the usual booking link if I publish my website?",[234],"It takes people to your website's address (yourbusiness.fiuit.app). If you unpublish it, it goes back to being the booking page it was.",{"id":5017,"title":5018,"titles":5019,"content":5020,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-fiuit-turn-my-website-off","Can Fiuit turn my website off?",[234],"Yes, if it impersonates Fiuit or another business or has abusive content. Fiuit revokes it with a reason and you can't publish it again until Fiuit restores it; then you publish it yourself.",{"id":5022,"title":5023,"titles":5024,"content":5025,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-my-customers-cancel-their-plan-in-the-chat","Can my customers cancel their plan in the chat?",[234],"Yes. If they write “I want to cancel my club” (or their membership, package or plan), the bot shows what happens: no more fees are generated and the ones already issued remain, with the pending amount in view. Only with their YES does it cancel the plan, just like “Cancel” in the panel (with a card, also in Mercado Pago). An unpaid fee isn't forgiven: you see it as To collect on the fee task.",{"id":5027,"title":5028,"titles":5029,"content":5030,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-mercado-pago-doesnt-respond-when-i-cancel-a-card-plan","What happens if Mercado Pago doesn't respond when I cancel a card plan?",[234],"The cancellation goes through anyway: no more fees are generated. Fiuit asks Mercado Pago to cancel again on its own, every few minutes, until it confirms.",{"id":5032,"title":5033,"titles":5034,"content":5035,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-ai-assistants-book-at-my-business","Can AI assistants book at my business?",[234],"Yes, if your website is published and «Accept AI agents» is on (it is on by default). An assistant like ChatGPT or Claude can find your business, see what your bot offers and its times, and request a booking. If you turn it off, your business doesn't show up nor receive requests from assistants.",{"id":5037,"title":5038,"titles":5039,"content":5040,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-an-ai-assistant-requests-a-booking-and-the-person-doesnt-confirm","What happens if an AI assistant requests a booking and the person doesn't confirm?",[234],"The time is held for a few minutes and the person receives a code by WhatsApp, Telegram or email. Without that code the booking isn't confirmed and the time is released on its own. The assistant never confirms on its own.",{"id":5042,"title":5043,"titles":5044,"content":5045,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#how-does-my-business-show-up-when-someone-searches-with-an-ai-assistant","How does my business show up when someone searches with an AI assistant?",[234],"By your exact name or address, always. In searches like «padel in Uruguaiana», only if «Show in the Fiuit directory» is on. The order is neutral (distance, free times and whether you're open) and it only shows your name, area, what you offer and the link to your website.",{"id":5047,"title":5048,"titles":5049,"content":5050,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-an-ai-assistant-chat-with-my-bot","Can an AI assistant chat with my bot?",[234],"Yes, if your website is published and «Accept AI agents» is on. Your same bot answers, with your rules, and the chat shows up in the Inbox marked «Via AI»: your team can take it over like any other. It uses AI usage like any channel.",{"id":5052,"title":5053,"titles":5054,"content":5055,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-an-ai-assistant-book-by-chatting-with-my-bot","Can an AI assistant book by chatting with my bot?",[234],"Yes, but the assistant's «yes» doesn't confirm: it needs the person's name and phone or email, and that person receives a code. The booking is made only with that code. Cancelling, rescheduling or requests without a time can't be done from an assistant.",{"id":5057,"title":5058,"titles":5059,"content":5060,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-when-the-person-confirms-the-code-their-ai-assistant-asked-for","What happens when the person confirms the code their AI assistant asked for?",[234],"The chat isn't cut off: for 24 hours it continues on that person's record. The bot greets them by name, knows their bookings, orders and plans, and can book or order again without another code. Cancelling, rescheduling and paying need a new code each time. After 24 hours, or in a new chat, the assistant starts again without the person's data.",{"id":5062,"title":5063,"titles":5064,"content":5065,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-the-person-end-their-ai-assistants-session-before-the-24-hours","Can the person end their AI assistant's session before the 24 hours?",[234],"Yes: they ask their assistant to end the session. From then on that chat no longer sees their data, and anything after that starts as a new chat.",{"id":5067,"title":5068,"titles":5069,"content":5070,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-i-change-a-price-in-my-online-store-after-the-bot-offered-it","What happens if I change a price in my online store after the bot offered it?",[234],"The order keeps the price the bot showed the customer, and Fiuit calculates the total. If the customer searches again, the bot tells them the new price. Set it up in My business → Catalog → Search my store.",{"id":5072,"title":5073,"titles":5074,"content":5075,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-my-online-store-doesnt-respond","What happens if my online store doesn't respond?",[234],"The bot tells the customer it can't check the store right now and offers to hand them to a person on the team. It never shows products it couldn't confirm.",{"id":5077,"title":5078,"titles":5079,"content":5080,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-a-customer-writes-their-email-or-phone-in-the-chat","What happens if a customer writes their email or phone in the chat?",[234],"The bot asks whether to save it to recognize them when they come back, and saves it only if they say yes. If your business can send it, they also get a code: with the right code, the profile shows the contact as “Confirmed by code”.",{"id":5082,"title":5083,"titles":5084,"content":5085,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#does-the-chat-code-merge-two-profiles-of-the-same-customer-on-its-own","Does the chat code merge two profiles of the same customer on its own?",[234],"No. It proves the contact reaches the customer, but you (Owner or Manager) confirm the merge from “Possibly the same customer” on the profile. The bot never shows the customer another profile's history.",{"id":5087,"title":5088,"titles":5089,"content":5090,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#does-the-bot-recommend-what-to-sign-up-for-based-on-what-the-customer-says","Does the bot recommend what to sign up for based on what the customer says?",[234],"Yes. If the customer said something (“we're 3 at the shop”, “I run a club with 200 members”) and asks for prices or which plan fits, the bot recommends up to three options from what it offers, with their price and a short reason, and lets them see all of them. The price comes from your catalog, never from the AI. If they didn't say anything, it shows the usual list.",{"id":5092,"title":5093,"titles":5094,"content":5095,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#where-does-the-link-the-bot-sends-for-each-service-product-or-plan-go","Where does the link the bot sends for each service, product or plan go?",[234],"To the link you set on that service, product or plan (Catalog, on its page). Without one, the bot uses the “What the bot sells” link (Customer care → Bot).",{"id":5097,"title":4031,"titles":5098,"content":4033,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-ai-assistant-channel-reaches-its-limit",[234],{"id":5100,"title":5101,"titles":5102,"content":5103,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-when-a-customer-orders-the-same-thing-again","What happens when a customer orders the same thing again?",[234],"The bot offers their last order for that service ready to go and only creates it if the customer says yes; with a no, it asks what to change. For a booking, it asks once whether to use last time's details. The price is always today's.",{"id":5105,"title":5106,"titles":5107,"content":5108,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-i-stop-the-bot-from-remembering-sensitive-data","Can I stop the bot from remembering sensitive data?",[234],"Yes: in My business → Catalog → a service → Service form, tick «Don't remember (sensitive data)» on that field. The bot asks for it every time.",{"id":5110,"title":5111,"titles":5112,"content":5113,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#how-many-intent-flows-can-i-have-and-what-if-a-keyword-matches-a-service","How many intent flows can I have, and what if a keyword matches a service?",[234],"Up to 8 active; to activate another, deactivate one. The bot checks the catalog first, so a keyword equal to a service, product or plan is not saved and we tell you which one it clashes with. Try the phrases with Test in My business → Stages → «When to start» before saving.",{"id":5115,"title":5116,"titles":5117,"content":5118,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-i-see-the-path-a-bot-conversation-took-and-where-it-stopped","Can I see the path a bot conversation took and where it stopped?",[234],"Yes. In the Inbox conversation, the Path line tells which part of the bot it went through (for example, Products) and how it ended: it created a task, was answered, went to a person or dropped off at a step (like the address). In Customer care → Bot → Bot service you see, per branch, how many conversations from the last 7 days ended each way. What the customer wrote is not stored.",{"id":5120,"title":5121,"titles":5122,"content":5123,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#can-i-ask-wagy-to-change-what-the-bot-offers-first-or-to-stop-selling-something","Can I ask Wagy to change what the bot offers first or to stop selling something?",[234],"Yes. Ask «put bookings first», «complaints last» or «greet with…» and it shows you the bot service before and after; «don't sell subscriptions by chat» is the same as unchecking that type in «What the bot sells». It only changes when you confirm, and you can undo it. Questions, My appointments and orders and Talk to a person can't be paused: Wagy explains why. The same is done in Customer care → Bot → Bot service.",{"id":5125,"title":5126,"titles":5127,"content":5128,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-when-a-customer-reports-a-transfer-with-no-open-payment-request-in-chat","What happens when a customer reports a transfer with no open payment request in chat?",[234],"The bot says it notified the team to check the payment and marks the conversation as Needs attention in Inbox. It also recognizes the notice when it ends with «did you get it?». Saying they paid does not record a payment or confirm the money arrived; check before recording it.",{"id":5130,"title":5131,"titles":5132,"content":5133,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-is-the-card-that-shows-up-when-i-open-wagy-each-day","What is the card that shows up when I open Wagy each day?",[234],"The first time you open Wagy each day a card shows what matters most: something urgent (late orders, orders to schedule, unanswered chats, overdue payments), otherwise good news, otherwise a «First steps» feature to try. Dismiss it with a tap; it stays away until tomorrow.",{"id":5135,"title":5136,"titles":5137,"content":5138,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fbot#what-happens-if-the-customer-writes-a-weekday-and-a-day-number-that-do-not-match","What happens if the customer writes a weekday and a day number that do not match?",[234],"The bot asks which date the customer meant before booking or rescheduling. For example, if the 27th is a Tuesday and they write “Wednesday 27th”, it asks “Tuesday 27th or Wednesday 28th”. It does not choose a different week on its own. The conversation is visible in Inbox.",{"id":239,"title":238,"titles":5140,"content":5141,"level":257},[],"Quick answers about taking and releasing tasks, outcomes, team permissions and work evidence.",{"id":5143,"title":5144,"titles":5145,"content":5146,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-is-charge-sometimes-the-main-button","Why is «Charge» sometimes the main button?",[238],"A task has a single main button. It is almost always the stage button at the bottom, and Charge is outlined next to the balance. Charge becomes the main one when the stage asks for payment (for example, payment is missing to complete) or when the task is already closed with a balance left. With no balance it does not show. There is nothing to set up.",{"id":5148,"title":5149,"titles":5150,"content":5151,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-the-customer-answers-the-quote","What happens when the customer answers the quote?",[238],"The owner, managers and whoever has the task get the notice “Juan approved the quote” (or “declined it”) in the bell, push and Telegram; whoever recorded the answer by hand does not get their own notice. If many arrive together, they are grouped into one. You set it up in My account → My notices.",{"id":5153,"title":5154,"titles":5155,"content":5156,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-the-customer-hasnt-written-to-me-in-the-last-24-hours-and-i-send-a-quote","What happens if the customer hasn't written to me in the last 24 hours and I send a quote?",[238],"With official WhatsApp it still reaches them, with the approved quote template: the total and a note to reply «I approve» or «No, thanks». Within 24 hours they get the full quote with those two buttons. If the template isn't approved yet, it doesn't go out and the conversation is flagged for your team.",{"id":5158,"title":5159,"titles":5160,"content":5161,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-is-the-delivery-date-worked-out","How is the delivery date worked out?",[238],"If the service has a Delivery time (in Advanced options), the task starts with its creation date plus those business days, counting only the days you are open: Friday + 3 is Wednesday. Without it, the task has no date and you can set one with a tap in its header.",{"id":5163,"title":5164,"titles":5165,"content":5166,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#does-the-customer-hear-about-it-if-the-delivery-date-changes","Does the customer hear about it if the delivery date changes?",[238],"Yes. They see the date in the confirmation and notices, and if you change it they get a notice with the new date. It turns off with the rescheduling notices.",{"id":5168,"title":5169,"titles":5170,"content":5171,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#when-is-a-task-late","When is a task late?",[238],"If it has a delivery date, once that date passes (plus your business's grace time) and it is still open. Without one, when its booked time ends without being closed.",{"id":5173,"title":5174,"titles":5175,"content":5176,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#who-sees-the-cost-and-the-margin","Who sees the cost and the margin?",[238],"Only the owner, and hidden at first: in the task's items block, tap Show costs. Other roles don't see the button and don't get them through the API, MCP or Wagy either; whoever entered a line still sees that line's cost to record it as an expense. The per-task margin in Finance is owner-only too.",{"id":5178,"title":5179,"titles":5180,"content":5181,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-do-i-charge-a-task-with-items","How do I charge a task with items?",[238],"Below the total you see Balance due with a single Charge: it charges what is left of the whole task (items and service) and, if there were payments already, only the rest. You pick the payment method when you tap it.",{"id":5183,"title":5184,"titles":5185,"content":5186,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#is-sending-the-quote-to-the-customer-required","Is sending the quote to the customer required?",[238],"No. It is optional: a stage with Ask for quote approval sends it, or the Send quote to the customer button in the items block. Each stage's main button says below which stage it moves to and whether the customer gets the quote.",{"id":5188,"title":5189,"titles":5190,"content":5191,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-choose-what-the-task-shows-in-my-business","Can I choose what the task shows in my business?",[238],"Yes. In each flow, My business → Stages → How the task looks picks what goes on top (When, Destination, Order, nothing or automatic) and whether the customer and payment chips show. Each industry starts with its own defaults and you can change them anytime, also by asking Wagy. It doesn't change stages or move tasks.",{"id":5193,"title":5194,"titles":5195,"content":5196,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-turn-off-items","What happens if I turn off “Items”?",[238],"Tasks in that flow stop offering “+ Add item”. Whatever was already added stays visible and nothing is deleted.",{"id":5198,"title":5199,"titles":5200,"content":5201,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-dont-i-see-all-my-members-fees-in-today","Why don't I see all my members' fees in Today?",[238],"Today and Work show only fees that are overdue or due within the plan's notice days; paid and waived fees, and those charged to a card, stay hidden unless the charge fails. They are all in Money → Receivables and in the customer's account. Instead of one notice per fee, you get one a day with how many came due.",{"id":5203,"title":5204,"titles":5205,"content":5206,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-do-i-add-a-part-or-material-that-isnt-in-the-catalog","How do I add a part or material that isn't in the catalog?",[238],"In the task, tap + Add and type: the search shows catalog products and services plus the items you've used before. If nothing matches, choose Add “text”, enter a price and quantity (cost is optional) and mark it as a product or a service. It then asks whether to save it in the catalog; after three uses it suggests saving it as a product. Owners, managers and technicians on their own tasks can do it, also from Focus and the Mini App with + Add part, and Wagy proposes it for you to confirm.",{"id":5208,"title":5209,"titles":5210,"content":5211,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-a-stage-asks-for-quote-approval","What happens when a stage asks for quote approval?",[238],"When the task enters that stage, the customer automatically gets the quote with «I approve» and «No, thanks». Depending on the answer, the task follows the path you chose for «approved» or «rejected». If they answer by phone or in person, you record the answer on the task; the first one counts.",{"id":5213,"title":5214,"titles":5215,"content":5216,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-the-customer-answers-the-quote-with-a-question","What happens if the customer answers the quote with a question?",[238],"It is neither approved nor rejected: the bot tells them the team will look at it and the conversation goes to Needs attention. Only the button or a clear «yes» or «no» counts.",{"id":5218,"title":5219,"titles":5220,"content":5221,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-the-bot-offers-something-to-the-customer-in-the-chat","What happens when the bot offers something to the customer in the chat?",[238],"If the stage offers something to the customer, the bot proposes it with the catalog name and price and adds it only when the customer says yes in a later message; if they say no, the stage continues as usual. A service with a schedule is booked in one of the times the bot offers, after their appointment, or is left to schedule. What was accepted shows on the task, in Work.",{"id":5223,"title":5224,"titles":5225,"content":5226,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-do-i-view-pending-work-when-there-is-none","How do I view pending work when there is none?",[238],"In Work, the View menu and filters remain available even without tasks. You can select Pending without a zero count; with no results, the message identifies the selected view and offers See all or Clear filters. Your view is remembered as before.",{"id":5228,"title":5229,"titles":5230,"content":5231,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-color-does-a-stage-use-if-i-do-not-choose-one","What color does a stage use if I do not choose one?",[238],"The color is automatic: green on completion, red for cancellation or no-show, gray while waiting, and blue, amber or violet as work progresses. The Owner can choose another palette color in My business → Stages → Stage color, or ask Wagy and confirm the change. Stages always show their name too.",{"id":5233,"title":5234,"titles":5235,"content":5236,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-i-ask-wagy-for-several-changes-at-once","What happens when I ask Wagy for several changes at once?",[238],"Wagy builds the list (for example, «these 7 late ones move to tomorrow») and, if something reaches the customer, you confirm it once. Then it applies them one at a time, each with its own countdown: you can Stop this one, Pause all and Resume, and undo each change on its own. What doesn't fit (no free slot or a conflict) is marked for you to choose, without stopping the rest.",{"id":5238,"title":5239,"titles":5240,"content":5241,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-an-accepted-quotes-total-changes","What happens if an accepted quote's total changes?",[238],"The customer receives the updated quote with the difference and separate service and product subtotals. The team records the reply: until approval, the difference cannot be charged by link, QR, Point, card or a manual payment allocation; rejecting the quote does not release it either.",{"id":5243,"title":5244,"titles":5245,"content":5246,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#does-a-parts-cost-automatically-become-an-expense","Does a part's cost automatically become an expense?",[238],"No. Cost is private and used to calculate the margin; the customer never sees it. “Record as expense” adds cost times quantity to Finance and, when recorded by a technician, waits for approval.",{"id":5248,"title":5249,"titles":5250,"content":5251,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-i-merge-two-team-members","What happens when I merge two team members?",[238],"From the profile, an owner or manager chooses “Merge with…”, selects who stays, reviews what moves and confirms. Tasks, teams and access move to that person; the other becomes inactive and the action cannot be undone. The kept person retains their schedule or adopts the other's if they had none; an account only moves if they had none. Two different accounts, overlapping tasks or insufficient capacity prevent confirmation without changing anything. Completed task commissions and settlements keep their original attribution; reopening and completing again uses the new completion's assignment. For now, this operation is available in the panel.",{"id":5253,"title":5254,"titles":5255,"content":5256,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-does-wagy-do-on-its-own-without-asking-me","What does Wagy do on its own, without asking me?",[238],"Only internal things that can be undone, like scheduling a task with no deposit and no customer notice: it shows «Doing it in 10 s» with Undo and Now. Anything that charges or messages a customer always asks for confirmation. Owner and Manager choose what it does on its own in expanded Wagy → Does it on its own, and see What Wagy did right there to undo it.",{"id":5258,"title":5259,"titles":5260,"content":5261,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-change-the-stages-of-the-service-flow-that-comes-with-fiuit","Can I change the stages of the service flow that comes with Fiuit?",[238],"Yes. On the service, under Stages: Service flow, tap Edit stages: you edit your business's copy, which every service that used the original now uses. Back to original sets it aside whenever you want.",{"id":5263,"title":5264,"titles":5265,"content":5266,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-my-open-tasks-if-i-go-back-to-the-original-flow","What happens to my open tasks if I go back to the original flow?",[238],"They do not move: they finish with the stages they had. New tasks start on the original flow. Your copy is not deleted: it stays \"Unused\" and you delete it by hand if you want.",{"id":5268,"title":5269,"titles":5270,"content":5271,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-delete-a-flow-i-no-longer-use","Can I delete a flow I no longer use?",[238],"Yes, if no service uses it and it never had tasks: in My business → Stages (advanced) it shows \"Unused\" with Delete. If it had tasks, deactivate it.",{"id":5273,"title":5274,"titles":5275,"content":5276,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#where-do-i-see-how-much-each-flow-is-used-and-which-stage-tasks-get-stuck-in","Where do I see how much each flow is used and which stage tasks get stuck in?",[238],"In My business → Stages each flow shows its last 7 days against the previous 7. Open one to see the last 12 weeks day by day (tap a day to open in Work the tasks that came in) and, in «Where they get stuck», the stage with the longest wait highlighted. Test tasks don't count; collaborators only see their own.",{"id":5278,"title":5279,"titles":5280,"content":5281,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-does-the-customer-see-if-my-service-is-remote","What does the customer see if my service is remote?",[238],"No address is asked for or shown: not in the chat, not in web booking, not in notices. The task does not store your business address either and does not appear on the map. You choose it in the service, under Advanced options → Where it takes place → Remote.",{"id":5283,"title":5284,"titles":5285,"content":5286,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-does-the-customer-get-the-video-call-link","How does the customer get the video call link?",[238],"Add it in the same place, under Meeting link: the bot sends it when confirming and the reminder repeats it. It is the same link for every task of the service; Fiuit does not generate it, paste your room's link.",{"id":5288,"title":5289,"titles":5290,"content":5291,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-does-todays-focus-mode-work","How does Today's Focus mode work?",[238],"In Today, with the ▶ Focus button, you do your tasks one at a time, full screen. You can also reschedule, mute the sound or test the whistle on iPhone there. The full detail is in Focus, one task at a time.",{"id":5293,"title":5294,"titles":5295,"content":5296,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-doesnt-the-whole-page-zoom-when-i-pinch-on-my-phone","Why doesn't the whole page zoom when I pinch on my phone?",[238],"The panel keeps its size to avoid accidental zooming, including in the installed app and when typing.\nIn Work, zoom the map or calendar inside its viewer; the photo editor keeps its own zoom too.",{"id":5298,"title":5299,"titles":5300,"content":5301,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-many-products-can-an-order-have","How many products can an order have?",[238],"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":5303,"title":5304,"titles":5305,"content":5306,"level":263},"\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?",[238],"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":5308,"title":5309,"titles":5310,"content":5311,"level":263},"\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?",[238],"They can release it as long as it hasn't started: it goes back to Unassigned so someone else can take it.",{"id":5313,"title":5314,"titles":5315,"content":5316,"level":263},"\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?",[238],"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":5318,"title":5319,"titles":5320,"content":5321,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-an-action-fails-halfway","What happens if an action fails halfway?",[238],"Nothing is left half done: everything an action does happens together or not at all.",{"id":5323,"title":5324,"titles":5325,"content":5326,"level":263},"\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?",[238],"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":5328,"title":5329,"titles":5330,"content":5331,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-customer-data-does-the-team-see","What customer data does the team see?",[238],"A team member sees the tasks assigned to them and those their team 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":5333,"title":5334,"titles":5335,"content":5336,"level":263},"\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?",[238],"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":5338,"title":5339,"titles":5340,"content":5341,"level":263},"\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?",[238],"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, the timeline if there are active resources, and Mine if you have your own schedule. See Tasks and actions.",{"id":5343,"title":5344,"titles":5345,"content":5346,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-i-pause-or-duplicate-a-service","What if I pause or duplicate a service?",[238],"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; teams 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":5348,"title":5349,"titles":5350,"content":5351,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-package-units-expire-or-consumption-fails","What if package units expire or consumption fails?",[238],"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":5353,"title":5354,"titles":5355,"content":5356,"level":263},"\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?",[238],"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":5358,"title":5359,"titles":5360,"content":5361,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-are-packages-or-memberships-billed-and-cancelled","How are packages or memberships billed and cancelled?",[238],"Each period is a fee: a To collect task at the plan's price, shown on the customer page and in To collect. It is collected like any task (record a payment or a payment link); when selling you can collect the first one right away, and the next one shows up on its own before it is due. Cancelling creates no more fees and doesn't touch the ones already created; a refund is optional and returns only the unused part of the current period's fee paid by hand. Expired units are not refunded. A refund is blocked if the cash collection’s day is already closed.",{"id":5363,"title":5364,"titles":5365,"content":5366,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#when-is-a-plan-fee-due-and-when-does-it-show-up","When is a plan fee due and when does it show up?",[238],"The plan decides: the sale day of each month, the 1st, the last day of the month or a fixed day from 1 to 28. Each fee shows up a few days before it is due (5 by default; 0 to 28 in the plan) and only becomes debt once it is due. You choose it when creating or editing the plan.",{"id":5368,"title":5369,"titles":5370,"content":5371,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-much-is-the-first-fee-if-i-sell-mid-month","How much is the first fee if I sell mid-month?",[238],"The share of the days left until the next due date, rounded, unless the plan has Charge the first fee in full on. The first period's sessions are full. If you sell within the notice days, the next fee is created too.",{"id":5373,"title":5374,"titles":5375,"content":5376,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-my-customers-if-i-change-a-plans-price","What happens to my customers if I change a plan's price?",[238],"The new price applies to the next fee of each live subscription; fees already created don't change. The customer is not notified: they see it in their next fee. When you save, we show how many subscriptions it reaches. If you want another price only for some customers, create another plan.",{"id":5378,"title":5379,"titles":5380,"content":5381,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-record-a-fee-payment-with-wagy","Can I record a fee payment with Wagy?",[238],"Yes: say «record Ana's club payment» and how she paid. Wagy finds the oldest fee to collect on that plan, shows you the amount (that task's balance) and collects it when you confirm; you need permission to record payments. It can't be undone from Wagy: the payment is voided from the task.",{"id":5383,"title":5384,"titles":5385,"content":5386,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#does-wagy-tell-me-the-first-fee-before-selling-a-plan","Does Wagy tell me the first fee before selling a plan?",[238],"Yes. Before you confirm the sale, Wagy's plan shows the first fee amount computed by Fiuit (prorated or full) and whether the next one is created too. When cancelling a subscription, it lists the open fees, which don't change.",{"id":5388,"title":5389,"titles":5390,"content":5391,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-the-panel-styles-fail-to-download","What if the panel styles fail to download?",[238],"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":5393,"title":5394,"titles":5395,"content":5396,"level":263},"\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?",[238],"The panel teams 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":5398,"title":5399,"titles":5400,"content":5401,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-someone-changes-a-team-view-in-work","What happens if someone changes a team view in Work?",[238],"Their changes stay with them only, shown as «modified», and never touch the team view. Only an Owner or Manager can save over it; everyone else can use Save as mine. You see it in Work → View.",{"id":5403,"title":5404,"titles":5405,"content":5406,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-the-view-i-was-using-is-deleted","What happens if the view I was using is deleted?",[238],"Work opens the default view, with no error: the work isn't touched, only the view. The same happens if you lose access to a shared view.",{"id":5408,"title":5409,"titles":5410,"content":5411,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-do-i-see-while-the-panel-loads","What do I see while the panel loads?",[238],"The loading screen follows your theme until styles are ready; the panel uses styles that have already downloaded. Fonts apply when their download finishes without delaying startup.",{"id":5413,"title":5414,"titles":5415,"content":5416,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-notices-when-i-recreate-sample-data","What happens to notices when I recreate sample data?",[238],"You can recreate your sample data without earlier notices interrupting later ones. Sample data still sends no messages to real customers.",{"id":5418,"title":5419,"titles":5420,"content":5421,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-a-customer-does-not-pay-the-membership","What happens if a customer does not pay the membership?",[238],"The membership is unpaid and notifies Owners and Managers (not the rest of the team), but current units remain usable by default: the business decides. See My business → Catalog → plan → Subscribers and the customer page; Owner or Manager can Pause benefits or Reactivate. Pausing prevents reserving new units, without cancelling tasks or clearing debt. If a task was already covered by the membership, completing it (or moving it to the last stage) releases the unit and charges the task at its normal price: it never gets stuck.",{"id":5423,"title":5424,"titles":5425,"content":5426,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#does-paying-the-membership-reactivate-paused-benefits","Does paying the membership reactivate paused benefits?",[238],"Collecting a fee settles that month; the membership is up to date again when no due fee is left unpaid. If it was paused, it stays paused until you choose Reactivate on the customer page. Payment does not restore used or expired units.",{"id":5428,"title":5429,"titles":5430,"content":5431,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-the-debt-if-i-cancel-an-unpaid-membership","What happens to the debt if I cancel an unpaid membership?",[238],"Cancelling creates no more fees and doesn't touch the ones already created: an unpaid fee is still debt and you collect it (or waive it by closing it without completing) like any task, on the customer page or in To collect. Future tasks that used the membership go back to their normal price.",{"id":5433,"title":5434,"titles":5435,"content":5436,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-dont-i-see-a-rooms-or-vehicles-tab-in-team","Why don't I see a rooms or vehicles tab in Team?",[238],"Rooms and vehicles are together in My business → Team and resources. Pick their type in the filter or tap Add to create one; they do not have separate tabs. People contains human resources and team accounts.",{"id":5438,"title":5439,"titles":5440,"content":5441,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-do-i-add-a-photo-for-someone-on-the-team","How do I add a photo for someone on the team?",[238],"If the person has an account with a photo, that one is used. Otherwise an Owner or Manager opens their profile in People and taps the camera. The photo shows on their tasks and commissions.",{"id":5443,"title":5444,"titles":5445,"content":5446,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-does-a-team-member-see-in-their-own-profile","What does a team member see in their own profile?",[238],"From My account they open their profile: photo, phone, hours, services and current commission. They can't edit it or see other people's phones or photos.",{"id":5448,"title":5449,"titles":5450,"content":5451,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-do-i-see-empty-sections-in-the-panel","Why do I see empty sections in the panel?",[238],"So you can discover every feature from day one. We hide noise (zero counters, filters with no options), but never the way into a feature: Finance, Inbox, Calendar or a customer's packages show up even when empty and tell you what to do to get started, with a button that takes you there.",{"id":5453,"title":5454,"titles":5455,"content":5456,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-do-i-change-a-services-commission","How do I change a service's commission?",[238],"In My business → Catalog, open the service and tap Edit: the Commission field shows the one in effect (the service's own or the general one). When you change it, the previous one ends and the new one applies from today; the history stays in Finance → Commissions.",{"id":5458,"title":5459,"titles":5460,"content":5461,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#where-do-i-see-the-money-numbers-for-a-service-a-customer-or-a-team-member","Where do I see the money numbers for a service, a customer or a team member?",[238],"On their screen, in the Finance card (service, customer profile, team member profile and Results). For the detail, tap View in Finance →: Finance opens already filtered, and you remove the filter by tapping its chip. Without finance permission or with money hidden, the card does not appear.",{"id":5463,"title":5464,"titles":5465,"content":5466,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-cancel-a-task-whose-stage-asks-for-data-to-cancel","What happens if I cancel a task whose stage asks for data to cancel?",[238],"It's cancelled anyway: cancelling is never blocked, from the panel, the bot, the API or an integration. The data the screen shows when cancelling is requested but optional, and is saved on the task if you fill it in. Rescheduling isn't blocked either. Set it up in My business → Catalog → Stages.",{"id":5468,"title":5469,"titles":5470,"content":5471,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-stage-notices-if-a-task-is-cancelled-or-paid-on-its-own","What happens to stage notices if a task is cancelled or paid on its own?",[238],"It counts just like moving it yourself: the task goes to the matching stage, its notices go out and your stage automations run, only once. The task history shows the change with «System» as its source. If someone was sharing their live location, they get the end notice.",{"id":5473,"title":5474,"titles":5475,"content":5476,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-tasks-if-i-block-time-that-already-has-bookings","What happens to tasks if I block time that already has bookings?",[238],"They are not moved or cancelled. Before blocking, the dialog shows the tasks already in that time so you can reschedule the ones you want or leave them as they are. You see it in Work → Calendar when blocking.",{"id":5478,"title":5479,"titles":5480,"content":5481,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-did-blocking-one-person-also-block-someone-else","Why did blocking one person also block someone else?",[238],"Because they share the same schedule: the block applies to everyone who uses it, and the dialog names them before saving. To block just one, give them their own schedule on their page.",{"id":5483,"title":5484,"titles":5485,"content":5486,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-pause-a-service-for-just-a-few-days","Can I pause a service for just a few days?",[238],"Yes, with Pause for a period on the service: that service is not offered on those dates. The people and spaces that provide it are not blocked: they stay available for their other services. You can reopen it any time from the same screen.",{"id":5488,"title":5489,"titles":5490,"content":5491,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-see-today-grouped-by-person-or-by-service","Can I see Today grouped by person or by service?",[238],"Yes. In Today tap View and choose Team by (resource, service, customer, stage…) and Sort by. By default it shows by moment (Now, In progress, Completed). Your choice is remembered; the Work list uses the same selector.",{"id":5493,"title":5494,"titles":5495,"content":5496,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-leave-the-initial-setup-for-later","What happens if I leave the initial setup for later?",[238],"In Let’s set up your project, tap Skip for now and confirm: your answers stay saved and you enter the panel. Today shows Resume setup so you can continue where you left off.",{"id":5498,"title":5499,"titles":5500,"content":5501,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-is-the-initial-setup-answered-with-cards","Why is the initial setup answered with cards?",[238],"Each piece of data goes in its own card (team, hours with start and end times, services) so nothing is filled in with something you didn't write. The preview marks what you entered as «not applied yet» until you confirm the plan.",{"id":5503,"title":5504,"titles":5505,"content":5506,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-the-prices-i-write-in-the-initial-setup","What happens to the prices I write in the initial setup?",[238],"If you answer by writing, Fiuit only takes the prices you wrote and shows them in the plan before you confirm. Anything unclear is completed in the card. Nothing is applied until you confirm.",{"id":5508,"title":5509,"titles":5510,"content":5511,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-have-more-courts-or-people-than-my-plan-allows","What happens if I have more courts or people than my plan allows?",[238],"The card shows your plan's limit so you choose what to add; nothing beyond it is applied. You can change your plan later in Settings.",{"id":5513,"title":5514,"titles":5515,"content":5516,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-ask-to-talk-to-a-person-during-the-initial-setup","What happens if I ask to talk to a person during the initial setup?",[238],"Once you confirm, the Fiuit team gets your request with the reason and writes to you shortly at your account email (or on WhatsApp, if you added your business phone). Your answers stay saved and you can keep going meanwhile; tapping it again doesn't send another notice. It's at the top of the chat and the form.",{"id":5518,"title":5519,"titles":5520,"content":5521,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-during-the-initial-setup-i-remove-my-name-and-type-someone-else","What happens if, during the initial setup, I remove my name and type someone else?",[238],"Your calendar stays inactive (you don’t take bookings and it doesn’t count toward the plan limit) and the other person is created separately, with their own calendar. Only a name similar to yours («Chris» → «Christopher») corrects your name. You see it in the plan in Let’s set up your project before confirming.",{"id":5523,"title":5524,"titles":5525,"content":5526,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-counts-toward-my-plans-resource-limit","What counts toward my plan’s resource limit?",[238],"Everything that takes bookings and is active: courts, rooms, the place, equipment and people. Your own calendar doesn’t count if you don’t take bookings.",{"id":5528,"title":5529,"titles":5530,"content":5531,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-does-a-lesson-with-a-coach-book-at-a-club-with-courts","What does a lesson with a coach book at a club with courts?",[238],"Both a team member and a free court at the same time; renting a court books only the court. You see it in the plan before confirming and can change it later in the service.",{"id":5533,"title":5534,"titles":5535,"content":5536,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-reach-the-team-member-limit","What happens if I reach the team member limit?",[238],"Your plan may have a limit for Staff (people who serve customers) and another for panel users (Owner, Managers and Viewers); pending invitations also count. When you reach the limit, Team tells you and does not let you invite or move someone to the other group. You can deactivate someone to free a seat or ask Fiuit to raise it.",{"id":5538,"title":5539,"titles":5540,"content":5541,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#do-my-conditions-change-if-fiuit-changes-the-defaults","Do my conditions change if Fiuit changes the defaults?",[238],"No. Your project keeps its conditions. New values are copied only when creating new projects. See capacity in Team and the current fee in Finance, read only.",{"id":5543,"title":5544,"titles":5545,"content":5546,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#where-do-i-see-how-much-each-service-product-or-package-sells","Where do I see how much each service, product or package sells?",[238],"Open the service, or tap the product or package name in Catalog: you see quantities by day, week or month against the previous period. Amounts are not there: tap View in Finance to see them.",{"id":5548,"title":5549,"titles":5550,"content":5551,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#who-sees-the-performance-of-a-service-product-or-package","Who sees the performance of a service, product or package?",[238],"The owner and the manager see the business totals in each one's detail. The collaborator sees only Yours: what they handled, for services and products (not packages or club), never the business totals. It is quantities only: amounts live in Finance, and only with that permission.",{"id":5553,"title":5554,"titles":5555,"content":5556,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-ask-wagy-to-schedule-a-task","Can I ask Wagy to schedule a task?",[238],"Yes. Write, for example, “schedule a delivery for Pedro tomorrow afternoon”: Wagy finds the customer, offers two or three free times as buttons and, when you pick one, shows you the change to confirm. Nothing is created until you confirm, and you can undo it from the same chat. Owners and Managers can use it.",{"id":5558,"title":5559,"titles":5560,"content":5561,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-i-write-a-zone-as-an-abbreviation","What if I write a zone as an abbreviation?",[238],"You can write «SP», «AR» or «CABA»: Fiuit locates that zone when you save it and compares it with the customer's address. If it can't compare them, it doesn't reject the request or mark it out of coverage. You see it in Zones → Coverage.",{"id":5563,"title":5564,"titles":5565,"content":5566,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-theres-a-street-with-the-same-name-in-another-city","What if there's a street with the same name in another city?",[238],"If the customer didn't name another city, the bot doesn't take the street from the other city: it keeps the address as written, without a location, for you to review.",{"id":5568,"title":5569,"titles":5570,"content":5571,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-i-deactivate-the-zones-a-delivery-reaches","What if I deactivate the zones a delivery reaches?",[238],"If no active zone is left in «Delivers to», the delivery goes back to reaching all your zones.",{"id":5573,"title":5574,"titles":5575,"content":5576,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-does-the-confirmation-map-say-approximate","Why does the confirmation map say «approximate»?",[238],"Because the point isn't exact (for example, the middle of the street). The customer checks it before confirming.",{"id":5578,"title":5579,"titles":5580,"content":5581,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-pick-any-color-for-my-brand","Can I pick any color for my brand?",[238],"No: you pick one of the 11 colors in Fiuit's palette (we suggest the one closest to your logo), so everything stays readable and is not confused with error and success colors. If you pick none, it stays on «Palette color», the main color of your project's palette. You see it in My business → Details → Identity.",{"id":5583,"title":5584,"titles":5585,"content":5586,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-the-project-palette-if-i-pick-a-brand-color","What happens to the project palette if I pick a brand color?",[238],"It stays: it sets backgrounds and surfaces, and your brand color replaces its main color and details. The Project appearance preview already shows your brand color.",{"id":5588,"title":5589,"titles":5590,"content":5591,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#when-does-wagy-start-counting-15-more-days-when-extending-a-package","When does Wagy start counting «15 more days» when extending a package?",[238],"From the current expiry of the package or membership; if it already expired, from today. You can also say a date («until 11\u002F30»): it has to be after the current expiry. Extending or pausing benefits cannot be undone, and Wagy shows you that before you confirm.",{"id":5593,"title":5594,"titles":5595,"content":5596,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-does-a-customer-cancel-their-booking-in-the-chat","How does a customer cancel their booking in the chat?",[238],"They write «cancel my appointment»: with one booking the bot asks YES or NO; with several it shows them as buttons (or takes the one they name: «the beard one», «Friday's»). Only a YES cancels, and the cancellation policy never blocks it. The bot only sees the bookings of whoever is writing; plan installments can't be cancelled in the chat. You see it in Calendar.",{"id":5598,"title":5599,"titles":5600,"content":5601,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-does-a-customer-change-the-time-of-their-booking-in-the-chat","How does a customer change the time of their booking in the chat?",[238],"They write, for example, «move my appointment to tomorrow at 4pm»: the bot offers times for the same service and shows «Shall I move your Haircut from … to …?». With the YES the booking changes and the old time is freed; if the new one was taken first, the booking stays where it was and other times are offered. With a pending deposit, it has to be paid first. You see it in Calendar.",{"id":5603,"title":5604,"titles":5605,"content":5606,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-pin-the-zone-of-a-customer-address","Can I pin the zone of a customer address?",[238],"Yes. In the customer's profile, Addresses → Edit → Zone, pick the zone and it stays put: changing your zones does not recalculate it and new tasks with that address use it. “Based on the address” calculates it again from your zones' areas.",{"id":5608,"title":5609,"titles":5610,"content":5611,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-tasks-without-a-zone-when-i-create-a-zone","What happens to tasks without a zone when I create a zone?",[238],"When you save the zone (or change its area), open tasks with an address, overdue ones too, look for their zone again and the message says how many now have a zone. Times never move: if one lands in a zone that does not work that day, you reschedule it. You see it in My business → Team and resources.",{"id":5613,"title":5614,"titles":5615,"content":5616,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#do-i-need-to-ask-for-the-postal-code-separately-for-zones-to-work","Do I need to ask for the postal code separately for zones to work?",[238],"No. If the postal code is written in the address (“25 de Mayo 1530, W3230AIZ Corrientes”), it counts; the street number is never taken as a postal code. A zone with “3230” or “W3230” covers “W3230AIZ”.",{"id":5618,"title":5619,"titles":5620,"content":5621,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-move-an-appointment-by-dragging-it-on-the-schedule","Can I move an appointment by dragging it on the schedule?",[238],"Yes. In Work → Calendar you drag the appointment to another time, day or person: while you drag, the free times are highlighted and the appointment snaps to the nearest one. If you drop it where it doesn't fit, it isn't saved and it turns red with the reason («outside hours», «overlaps with…»). Owner and Manager can «Force anyway» outside the usual hours of the person or the service, with a confirmation; blocked time and what is already taken are never overlapped. Staff move only their own appointments, to their own schedules. A paid appointment moves anyway and keeps its payment.",{"id":5623,"title":5624,"titles":5625,"content":5626,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#is-the-customer-notified-when-i-move-an-appointment-and-can-i-undo-it","Is the customer notified when I move an appointment, and can I undo it?",[238],"When you drop it, the confirmation has «Notify the customer» checked by default (the usual reschedule notice); uncheck it to move quietly. Stretching or shrinking the length from the bottom edge (in 15-minute steps) is saved right away and sends no notice. Every change shows «Undo» in the notice at the bottom and goes back to the previous time, person and length. On a phone, press and hold to drag; stretching isn't available.",{"id":5628,"title":5629,"titles":5630,"content":5631,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-do-i-invite-someone-through-telegram-if-i-dont-have-their-number","How do I invite someone through Telegram if I don't have their number?",[238],"In My business → Team and resources → Add → Invite, choose Channel: Telegram and type their name. You get a link to send however you like: when they open it in Telegram, they join the team and get linked. It works only once and expires in 48 hours. WhatsApp is still the default channel.",{"id":5633,"title":5634,"titles":5635,"content":5636,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-the-telegram-invitation-link-was-shared-too-widely","What if the Telegram invitation link was shared too widely?",[238],"The first Telegram account to open it uses it. When someone joins, we notify you with the account name (also shown on their row and profile in People); if it was not who you expected, deactivate them. Before it is used, cancel it in People → Cancel invitation: the link stops working.",{"id":5638,"title":5639,"titles":5640,"content":5641,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-did-changing-one-services-stages-change-anothers","Why did changing one service's stages change another's?",[238],"Because both use the same flow: stages belong to the flow and each service picks one. When you publish, open tasks of every one of those services whose stage no longer exists move to the first stage with the same status, without changing status or repeating notices. If a service needs a different path, give it its own flow.",{"id":5643,"title":5644,"titles":5645,"content":5646,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-doesnt-an-old-task-have-the-new-stages","Why doesn't an old task have the new stages?",[238],"Each task follows the flow it was created with. Changing a service's flow applies to new tasks; open ones stay in theirs until they close.",{"id":5648,"title":5649,"titles":5650,"content":5651,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-ask-wagy-to-change-a-services-flow","Can I ask Wagy to change a service's flow?",[238],"Yes. Wagy shows the stage flows, their steps and which services use each one, and proposes changing the flow of one or several services; it applies when you confirm. It affects new tasks: open ones stay on theirs. Creating or editing a flow is done in My business → Stages.",{"id":5653,"title":5654,"titles":5655,"content":5656,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-ask-wagy-to-build-a-flow-or-to-make-a-stage-ask-for-something","Can I ask Wagy to build a flow or to make a stage ask for something?",[238],"Yes, if you are the Owner. Tell it the stages in order («build a color flow with a health form and a result photo») or which example to start from, and it shows you the journey before creating it; no service uses it until you assign it. It also adds what you ask for to a stage («signature before charging», «ask for the hair length»): unless you say otherwise, your team fills it in and it is required to move on. Everything is confirmed first and can be undone; you see it in My business → Stages.",{"id":5658,"title":5659,"titles":5660,"content":5661,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#where-do-i-edit-a-services-stages-now","Where do I edit a service's stages now?",[238],"In My business → Stages. A flow is the path a task follows and is used by the services that pick it; each service shows Flow: … with a selector and a link to open it. System flows cannot be edited: Duplicate creates your own. When you publish a version you see, per service, how many open tasks move and you confirm before saving. Picking another flow on a service changes only new tasks.",{"id":5663,"title":5664,"titles":5665,"content":5666,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-ask-wagy-to-add-or-remove-a-stage-of-a-flow","Can I ask Wagy to add or remove a stage of a flow?",[238],"Yes, if you are the Owner and it is one of your own flows. With the flow open in My business → Stages, say «add Washing after Scheduled», «remove the photo» or «put washing before the photo». Wagy shows the journey before and after, how many tasks change stage and which services use it (all of them change), and applies it when you confirm; if you change your mind, undo it. A system flow is not edited: copy it and edit the copy. Each stage's items, buttons and notices are edited in the panel.",{"id":5668,"title":5669,"titles":5670,"content":5671,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-two-buttons-lead-to-the-same-stage","Can two buttons lead to the same stage?",[238],"No. Each path of a stage leads to a different stage: when you edit paths in My business → Stages, only destinations not used by another path are offered. If you need two similar exits, add an intermediate stage.",{"id":5673,"title":5674,"titles":5675,"content":5676,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-apply-a-template-to-my-flow","What happens if I apply a template to my flow?",[238],"Before applying it you see what it adds, changes, removes and keeps, plus the map of how the journey would look. It's applied to the draft only: it's published when you tap Save, and you can go back from «Versions».",{"id":5678,"title":5679,"titles":5680,"content":5681,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-i-invite-a-person-from-their-profile","What happens when I invite a person from their profile?",[238],"In People, open the person and tap Invite this person under «Access and links»: the invitation goes out with their name and only their schedule. When they accept, their account is joined to that person (profile, photo and «my schedule»). An invitation sent from People → Add → Invite grants permissions over a schedule but doesn't join the account: whoever manages someone else's schedule doesn't become that person. If the person already had another account joined, they still join and the profile shows «Linked to another account». The account is released when it's deactivated, when that schedule is removed from it, or with Unlink on the profile.",{"id":5683,"title":5684,"titles":5685,"content":5686,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-fiuit-support-see-my-sales-and-payments","Can Fiuit support see my sales and payments?",[238],"No. When the Fiuit team enters your project to help, they see the calendar, tasks, customers and settings, but not your business's money: sales, payments, balances, finances, cash, commissions or credit limits. Like someone with read-only access, they do see each task's value, the deposit and catalog prices, because they need them to help you set things up.",{"id":5688,"title":5689,"titles":5690,"content":5691,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-does-my-ai-see-if-i-am-a-partner","What does my AI see if I am a partner?",[238],"If you check \"View your partner portfolio\" when connecting Claude or ChatGPT, your AI sees the same as your partner panel: the next action, your clients with their health light and the activity. It only reads counts and statuses, never a business's content or payments, nor another partner's clients. Revoke it in Settings → Developers → Connected apps.",{"id":5693,"title":5694,"titles":5695,"content":5696,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-can-the-partner-who-set-up-my-project-do","What can the partner who set up my project do?",[238],"When you accept the project, the partner becomes a Collaborator: they keep configuring and operating like a Manager, but they don't see charges, balances, Finance, payments or Mercado Pago, and they don't manage the team. You see them in People and remove them whenever you want; everything they do is logged under their name.",{"id":5698,"title":5699,"titles":5700,"content":5701,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-the-price-if-i-stretch-or-shorten-a-task","What happens to the price if I stretch or shorten a task?",[238],"If the service has Price by time, the task's amount follows the new duration proportionally (twice the time, twice the price). It doesn't change if a payment or deposit is already recorded, or if you adjusted the amount by hand. Turn it on in Services → a service → Advanced options.",{"id":5703,"title":5704,"titles":5705,"content":5706,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#which-flow-version-appears-in-a-task-journey","Which flow version appears in a task journey?",[238],"In the task details, “View journey” preserves historical versions and original stage names, with each step, date and actor. This also works for completed or cancelled tasks and is only available to team members who can access the task. If the historical map is unavailable, recorded steps remain visible.",{"id":5708,"title":5709,"titles":5710,"content":5711,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-do-i-set-hours-that-end-after-midnight","How do I set hours that end after midnight?",[238],"Set the closing time before the opening time: 20:00 to 03:00 is saved and shown as 20:00 – 03:00 (+1), closing the next day. The night counts as part of the day it opens, and bookings can cross midnight. For 24 hours use 00:00 to 00:00. You set it in the hours of each resource or service.",{"id":5713,"title":5714,"titles":5715,"content":5716,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-close-the-day-after-a-night","What happens if I close the day after a night?",[238],"The previous night stays: closing Saturday doesn't cut Friday 20:00 – 03:00 (+1). To remove that night, close Friday. Special hours on Saturday can't start before Friday's night ends.",{"id":5718,"title":5719,"titles":5720,"content":5721,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#where-do-i-add-something-to-the-catalog","Where do I add something to the catalog?",[238],"In My business → Catalog, select Add and choose an option available to your role. An empty catalog shows the button in the center to help you get started; with items or filters, it stays in the header, without repeating it in empty results.",{"id":5723,"title":5724,"titles":5725,"content":5726,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-my-schedule-if-i-dont-serve-customers-myself","What happens to my schedule if I don't serve customers myself?",[238],"Your project starts with you on the team. If you say in the initial setup that you don't serve customers, or that the place or the spaces are booked, your schedule stays inactive: it isn't offered to customers and doesn't count toward your plan's limit. You can turn it back on any time in Team.",{"id":5728,"title":5729,"titles":5730,"content":5731,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#does-choosing-a-trade-create-sample-services-or-people","Does choosing a trade create sample services or people?",[238],"No. It brings the trade's wording and automations, turned off. The team, the hours and the services come from your answers in the initial setup.",{"id":5733,"title":5734,"titles":5735,"content":5736,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-the-initial-setup-shows-an-error","What happens if the initial setup shows an error?",[238],"Your answers stay saved. The panel explains what happened and offers Try again or Talk to a person. If the existing team doesn't match the names, you can Use the current team or Review team.",{"id":5738,"title":5739,"titles":5740,"content":5741,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-correct-my-name-when-i-work-alone","What happens if I correct my name when I work alone?",[238],"If you are the only active person on the team and confirm one person with a single edited name, the same calendar linked to your account is renamed. You see the change before confirming in Initial setup, keep your team and can undo it.",{"id":5743,"title":5744,"titles":5745,"content":5746,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-i-combine-examples-and-later-want-to-undo-one","What if I combine examples and later want to undo one?",[238],"You can combine up to 3 examples (for instance, repair shop and car wash). Each one adds, without duplicates, its vocabulary, its flows, notices turned off and suggested services or products without price and turned off; it never creates people or spaces. If you undo a part, only what is still as it arrived is removed: what you changed or already use stays. Ask Wagy.",{"id":5748,"title":5749,"titles":5750,"content":5751,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-test-a-flow","What happens if I test a flow?",[238],"Nothing real: «Test flow» walks the draft on screen, even if you haven't saved it, without saving data, notifying the team or the customer, charging or sending messages. «What would happen» shows the notices and data there would be. The Owner sees it, in My business → Stages.",{"id":5753,"title":5754,"titles":5755,"content":5756,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-a-stage-moves-on-by-itself","What happens when a stage moves on by itself?",[238],"If the stage has a Timer, the task takes the chosen path by itself when it runs out (after N minutes, when the booked time ends or if the customer doesn't write) and shows a countdown. With «Moves on by itself when payment arrives», it moves when it is fully paid through Mercado Pago; a partial payment doesn't move it. The history shows it as automatic; if the path can't be taken, the task stays where it is. Set it up in My business → Stages.",{"id":5758,"title":5759,"titles":5760,"content":5761,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-a-stage-moves-on-by-itself-when-the-customer-replies-or-completes-the-form","What happens when a stage moves on by itself when the customer replies or completes the form?",[238],"With «When the customer replies», the task takes that path by itself as soon as the customer writes on any channel after it enters the stage; a repeated message doesn't move it twice. With «When the customer completes the form», it moves on when every required item the customer fills in that stage is there (the bot asks for them by chat, or the team enters them); if one is missing, it stays. The history shows it as automatic with the reason and, if the path can't be taken, it stays where it is with the «Didn't move on by itself» notice. Set it up in My business → Stages, on each path.",{"id":5763,"title":5764,"titles":5765,"content":5766,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-does-a-task-appear-in-both-control-and-today-attention","Why does a task appear in both Control and Today attention?",[238],"Both show the same reasons: overdue tasks, missing assignments or dates, zones, coverage, addresses, notices and reviews to check. Finance → Results only shows reasons with tasks; select one to open filtered Work. Delays respect the project’s grace period; reviews can remain pending after a task is completed.\nOpening a reason in Work shows exactly the counted tasks: «No zone» excludes outside coverage and «Unassigned» excludes assigned holds. Clearing filters also removes the service.",{"id":5768,"title":5769,"titles":5770,"content":5771,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-my-business-doesnt-fit-any-category","What if my business doesn't fit any category?",[238],"It doesn't have to: your business is described by traits that combine (serves on site, delivers, sells products, books courts…) and Wagy suggests similar examples. If something isn't in the catalogue, Wagy proposes it to the Fiuit team and it has no effect until approved. This isn't visible in the panel yet.",{"id":5773,"title":5774,"titles":5775,"content":5776,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-need-to-fill-in-data-from-the-quick-view","What happens if I need to fill in data from the quick view?",[238],"Choose Open task to complete forms, evidence, or payments in the full detail. In Work → Map or Calendar, the quick view offers only simple actions allowed for your team; it shows no amounts.",{"id":5778,"title":1126,"titles":5779,"content":1128,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-do-i-zoom-the-timeline-and-open-a-task",[238],{"id":5781,"title":1568,"titles":5782,"content":5783,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#where-do-i-organize-people-resources-and-the-catalog",[238],"My business has Details, Catalog, Team and resources (People, Teams, Zones and places) and Stages. Create rooms and vehicles in Resources. Manage teams and zones with their members and services in Work teams. The Team role grants panel access; a person can receive tasks without an account and the panel invitation is optional in their profile.",{"id":5785,"title":5786,"titles":5787,"content":5788,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-do-i-restore-an-archived-product-or-a-plan-i-stopped-selling","How do I restore an archived product or a plan I stopped selling?",[238],"In My business → Catalog, choose Inactive \u002F archived in Status and tap Reactivate. It becomes available again without losing history; deactivating a plan preserves its subscribers.",{"id":5790,"title":5791,"titles":5792,"content":5793,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-wagy-finds-a-trait-outside-the-catalog","What happens if Wagy finds a trait outside the catalog?",[238],"Wagy prepares a proposal and you confirm sending it to the team. During review it stays as your own label and changes neither flows nor the bot. The team can approve, reject or merge it; ask Wagy for its status. Approval does not activate the trait automatically.",{"id":5795,"title":5796,"titles":5797,"content":5798,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-an-automation-creates-a-scheduled-task-without-a-date","What happens if an automation creates a scheduled task without a date?",[238],"The task stays Unscheduled, like «Schedule later», and the bot or the team books it. If the automation picks a person or a resource, it needs a date. You'll find it in Work, with the unscheduled tasks.",{"id":5800,"title":5801,"titles":5802,"content":5803,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-a-delivery-only-reaches-some-zones-and-the-customer-is-in-another-one","What happens if a delivery only reaches some zones and the customer is in another one?",[238],"The same Zones → Coverage setting decides. With «Take it anyway and notify me», the bot offers the delivery, takes the order and the task shows up in Needs your attention as out of coverage. With «Do not take it», the bot doesn't offer it and tells the customer that delivery doesn't reach their area yet.",{"id":5805,"title":5806,"titles":5807,"content":5808,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-an-order-from-outside-the-area-i-set-up-in-the-initial-setup","What happens to an order from outside the area I set up in the initial setup?",[238],"It's still taken: the task gets the «out of coverage» tag and shows up in Needs your attention so you can decide. You adjust the area (whole city, a radius or neighborhoods and postal codes) later in Zones, where you can also choose not to take those orders.",{"id":5810,"title":5811,"titles":5812,"content":5813,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-does-still-occupying-mean-in-the-calendar","What does «Still occupying» mean in the calendar?",[238],"It is a started task that was not completed on its day and still takes its place: it takes the whole opening hours of each following day until you complete it, at most 7 days. After that the place is freed and the task stays in Late. You see it striped in Work → Calendar and Timeline; it does not drag.",{"id":5815,"title":5816,"titles":5817,"content":5818,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-a-service-with-a-person-be-full-day","Can a service with a person be full day?",[238],"No. Full day is for what is dropped off and picked up at the place (a car at the shop): the customer picks the day and comes in from opening time. If the service assigns a person, the panel does not save it as full day, nor lets you add a person to its team later. Switching to full day does not move tasks already booked. You choose it in My business → Catalog, on the service.",{"id":5820,"title":5821,"titles":5822,"content":5823,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-my-customers-book-more-than-one-hour-of-the-same-service","Can my customers book more than one hour of the same service?",[238],"Yes, if the service offers several durations (for example 1 h, 1 h 30 and 2 h): the customer picks one and gets a single booking with that duration and its price, or a prorated price if you didn't set one. The bot asks how long if the customer doesn't say. Set them up in Services, on the service, under «Durations the customer picks».",{"id":5825,"title":5826,"titles":5827,"content":5828,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-a-booking-starts-on-its-own","What happens when a booking starts on its own?",[238],"If the stage has a Timer «When the booked time starts», the task takes the chosen path at its start time (for example, from «Booked» to «In progress») and, with another «When the booked time ends», at its end time. If you reschedule it, the change moves with it; if it enters the stage after that time, it moves on right away. «No show» is still manual. Scheduled flows only; set it in My business → Stages.",{"id":5830,"title":5831,"titles":5832,"content":5833,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-remove-something-from-how-wagy-understood-my-business-during-setup","Can I remove something from how Wagy understood my business during setup?",[238],"Yes. Before you confirm the plan, Wagy shows “Here’s how I understood your business”: tap ✕ on what doesn’t fit or “Yes, that’s right”. What you confirm there is what gets set up; if you change another answer later, it shows it again. You’ll find it in Let’s set up your project.",{"id":5835,"title":5836,"titles":5837,"content":5838,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-does-the-initial-setup-start-by-asking-about-my-business","Why does the initial setup start by asking about my business?",[238],"Wagy asks you to describe your business in your own words. With that it tailors the questions and examples: an aesthetics clinic sees rooms and professionals, a club sees courts and coaches. What you already told it (your team, your hours, what you sell) isn't asked again: it shows up as a «From your message» card you can change with one tap. If it isn't enough, it goes on with the usual questions. You'll find it in Let’s set up your project.",{"id":5840,"title":5841,"titles":5842,"content":5843,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-is-next-months-expected-amount-in-finance-calculated","How is next month's expected amount in Finance calculated?",[238],"It is only a sum of dated things, not a statistic. Confirmed is what you already received (payment or deposit) for the scheduled tasks and the fixed expenses falling due; what you received in the same period is already in In and is not counted twice. Expected is the balance those tasks have not paid yet, the estimated team commission and the expenses awaiting approval. The payment fee is not estimated and receivables without a due date are not added. If nothing is scheduled, the next period does not appear. You see it in Finance → Home.",{"id":5845,"title":5846,"titles":5847,"content":5848,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#where-are-the-finance-reports","Where are the Finance reports?",[238],"In Finance → Reports: a selector with the income statement, cash flow, sales by month, team commissions, payments received, cash register, to collect and the accountant package. Each one has its Export button.",{"id":5850,"title":5851,"titles":5852,"content":5853,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-is-overdue-in-finance","What is \"overdue\" in Finance?",[238],"What is to collect and more than 30 days old. It hides when it is zero.",{"id":5855,"title":5856,"titles":5857,"content":5858,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-does-a-standing-booking-work","How does a standing booking work?",[238],"It is a booking that repeats (for example, every Tuesday at 8 pm) every 1 to 4 weeks, until a date or a number of times. You set it up with «Repeat» when you create a task, and each date is a normal task charged on that day. When you open a date you see «Standing booking» and can edit or cancel only that one, that one and the following, or the whole series.",{"id":5860,"title":5861,"titles":5862,"content":5863,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-a-date-of-a-standing-booking-clashes-with-another-booking-or-a-holiday","What happens if a date of a standing booking clashes with another booking or a holiday?",[238],"Before creating it, the preview of the next 8 weeks marks the dates that don't fit (closed, no room, holiday) and you skip each one or create the booking without them. Dates that clash later are not created and stay marked in the series. Cancelling a single date leaves the rest untouched.",{"id":5865,"title":5866,"titles":5867,"content":5868,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-something-cant-be-created-when-i-confirm-the-initial-setup","What happens if something can't be created when I confirm the initial setup?",[238],"What worked stays created and the rest is marked «I'll leave it in First steps». You can tap «Go in anyway»: your answers stay saved and you complete what's missing from First steps in Today.",{"id":5870,"title":5871,"titles":5872,"content":5873,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-linked-tasks-if-i-cancel-the-main-task","What happens to linked tasks if I cancel the main task?",[238],"The ones that haven't started are cancelled; the ones already in progress keep going and you decide. Rescheduling the main task cancels nothing: the linked tasks move with the new one.",{"id":5875,"title":5876,"titles":5877,"content":5878,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#does-the-customer-find-out-about-linked-tasks","Does the customer find out about linked tasks?",[238],"No. The customer only sees the main task: they get no notices about linked tasks and the bot doesn't show them.",{"id":5880,"title":5881,"titles":5882,"content":5883,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-the-team-adds-something-the-stage-offers","What happens when the team adds something the stage offers?",[238],"If it is a product (for example, a cream), it is added to the same task at the catalog price and the amount due goes up. If it is a service (for example, a beard trim), another task is created for the same customer, scheduled and charged separately. You see it on the task, under «Offer…».",{"id":5885,"title":5886,"titles":5887,"content":5888,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-to-the-beard-trim-if-i-cancel-the-haircut-that-offered-it","What happens to the beard trim if I cancel the haircut that offered it?",[238],"Nothing: they are two independent tasks. Cancelling one does not cancel the other or send the customer notices about it. Each task shows where it came from or what was accepted, only as a record.",{"id":5890,"title":5891,"titles":5892,"content":5893,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-cant-i-see-all-the-resources-or-catalog-tabs","Why can’t I see all the Resources or Catalog tabs?",[238],"Only types with items appear; a single type opens directly without tabs. Use the create menu to start another type. Search and status filters apply within the selected section.\nTeams have their own section with members, zones and services using each team.",{"id":5895,"title":5896,"titles":5897,"content":5898,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-does-new-task-ask-for-the-details-one-at-a-time","Why does “New task” ask for the details one at a time?",[238],"To make creating quick: first the customer, then the service and, last, “When and who”. Each chosen step stays as a line you can tap to change it; whatever already comes filled in (for example from the calendar or a customer’s page) is skipped.",{"id":5900,"title":5901,"titles":5902,"content":5903,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#where-does-the-time-that-new-task-suggests-come-from","Where does the time that “New task” suggests come from?",[238],"It is the real next free time for that service (with the person or team you pick), from today and up to 7 days ahead. Change it with one tap; if there is none in those days, you pick the date by hand.",{"id":5905,"title":5906,"titles":5907,"content":5908,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#where-did-co-responsibles-and-repeat-go-when-creating-a-task","Where did co-responsibles and “Repeat” go when creating a task?",[238],"Under More options, in the last step. It is closed by default; if you open it, it stays open next time, and if one of those options already has a value it opens by itself.",{"id":5910,"title":5911,"titles":5912,"content":5913,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-create-a-task-that-isnt-for-any-customer","Can I create a task that isn't for any customer?",[238],"Yes: in the first step of “New task”, choose No customer. It sends no notices to any customer and isn't billed, so it only works with a service that has no price. You can assign a customer later.",{"id":5915,"title":5916,"titles":5917,"content":5918,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-does-new-task-already-have-a-service-picked","Why does “New task” already have a service picked?",[238],"If that customer usually orders the same service (the one they ordered most in their latest tasks), we pick it for you to save a step. You can change it with one tap.",{"id":5920,"title":5921,"titles":5922,"content":5923,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-time-does-wagy-suggest-if-i-dont-say-when","What time does Wagy suggest if I don't say when?",[238],"The service's next real free time, from today and up to 7 days ahead, just like “New task”. If you ask for another day or time, it uses what you asked. Before creating, you see the proposal and confirm or let the countdown apply it, depending on your level.",{"id":5925,"title":5926,"titles":5927,"content":5928,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#where-is-the-explanation-that-used-to-be-on-the-screen","Where is the explanation that used to be on the screen?",[238],"It moved to the «?» next to the title: it shows one line and topic buttons, and each topic opens its own, with «Back» and «Start». From a topic you can tap «Do it with Wagy» to ask for it; Wagy never opens on its own. For now in Catalog, My account and Task payment.",{"id":5930,"title":5931,"titles":5932,"content":5933,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-is-no-show-missing-from-queue-workflows","Why is No show missing from queue workflows?",[238],"Queue work has no appointment to miss. In My business → Workflows, the editor does not offer No show for these workflows and preserves the configuration of workflows that already had it. Scheduled workflows keep this outcome.",{"id":5935,"title":5936,"titles":5937,"content":5938,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#which-work-view-opens-for-each-person","Which Work view opens for each person?",[238],"In a new business, staff start with Today in List and owners and managers with Kanban by stage. A view or layout you already chose stays. Focus remains in Today → Show.",{"id":5940,"title":5941,"titles":5942,"content":5943,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-do-i-try-the-panels-new-look","How do I try the panel's new look?",[238],"In My account → Language and mode, turn on “Try the new look (beta)”. It applies to you on that device and changes nothing for your team. If you prefer the usual look, turn it off and the panel goes back to how it was.",{"id":5945,"title":5946,"titles":5947,"content":5948,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-doesnt-wagys-board-show-orders-team-or-cash","Why doesn't Wagy's board show Orders, Team or Cash?",[238],"The board only draws what has data: an empty block, or one whose counters are all 0, stays hidden and shows up on its own when the first piece of data arrives. If you got no payments today but did this week, Cash shows the week with its period title. If there is nothing, you see «All calm for now». Find it in Wagy → Control panel → Board.",{"id":5950,"title":5951,"titles":5952,"content":5953,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-if-i-ask-wagy-for-the-first-available-for-sebastian","What if I ask Wagy for «the first available for Sebastian»?",[238],"Wagy books the task at Sebastian's first free time and assigns it to him; it also understands «Assign to Sebastian» written in the notes. If the time is missing, it shows the next free times as buttons, with «See more», and if nothing is free in the next 7 days it says so and asks for another date. What you already told it (customer, service, notes) is not asked again.",{"id":5955,"title":5956,"titles":5957,"content":5958,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-call-my-rooms-courts","Can I call my rooms «courts»?",[238],"Yes. Each type (room, equipment, table, vehicle, zone) can have its own name: the panel and the bot say «Courts» instead of «Rooms». When you set up the business we take the word you use («we have 4 courts»); later you change it in Settings → Vocabulary or by asking Wagy. Leave it empty and the usual name comes back.",{"id":5960,"title":5961,"titles":5962,"content":5963,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-types-of-partner-does-fiuit-have","What types of partner does Fiuit have?",[238],"Local implementer, agency and creator, the same names as on the website. In the partner panel,\nexisting records keep their code and projects under the equivalent type.",{"id":5965,"title":5966,"titles":5967,"content":5968,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#why-do-i-only-see-one-upcoming-stage-in-the-task-steps","Why do I only see one upcoming stage in the task steps?",[238],"In the details and in Focus, the steps summarize completed visits with a check, who and when, the current stage in its color and only the next one in grey. Other future stages stay hidden and earlier visits that do not fit collapse into “+N”; a cancelled task ends at “Cancelled”, without a next step. Swipe back to read each earlier visit and choose “Back to the current stage” to restore the action and keep working.",{"id":5970,"title":5971,"titles":5972,"content":5973,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#which-colors-does-my-business-website-use","Which colors does my business website use?",[238],"The website uses the palette you chose in My business → Details → Your brand colors, including one generated from your logo. It follows the light or dark mode of the customer’s device; a palette takes priority over the accent. Without a palette, it keeps the Fiuit theme with the business accent.",{"id":5975,"title":5976,"titles":5977,"content":5978,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-import-my-catalog-with-claude-or-chatgpt-and-change-my-mind","What happens if I import my catalog with Claude or ChatGPT and change my mind?",[238],"Before anything is loaded you see the preview and confirm. Afterwards you can ask your AI to undo the import: new products are deleted (or archived if they were already sold) and updated ones go back to how they were. It works for 7 days, as long as nobody edited the catalog afterwards; if someone did, it is not undone so that change is not overwritten. Services work the same way: only new ones are imported, and they can be undone if nobody changed them.",{"id":5980,"title":5981,"titles":5982,"content":5983,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-when-a-stage-that-only-alerts-sla-runs-out-of-time","What happens when a stage that only alerts (SLA) runs out of time?",[238],"If the stage's Timer is set to «When it expires: alert», when time runs out the chosen people are alerted (owners and managers, the whole team or whoever has the task) and the task stays in the stage. A single alert goes out each time the task enters the stage. The time can depend on an answer (for example severity: S1 1 h, S2 4 h, S3 1 day) and count from when the case arrived; if you change the answer, it is recalculated. Set it up in My business → Stages, under «+ Add → Automatic». It can be up to 30 days and counts calendar hours.",{"id":5985,"title":5986,"titles":5987,"content":5988,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#how-is-a-task-title-built","How is a task title built?",[238],"Each service picks up to 3 pieces: Customer, Order, Address, No. or a form field (for example, «Vehicle»). It fills in on its own as data arrives, and an empty piece is skipped. Set it in My business → Services → Edit service → Task title.",{"id":5990,"title":5991,"titles":5992,"content":5993,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#what-happens-if-i-edit-a-task-title-by-hand","What happens if I edit a task title by hand?",[238],"It stays fixed: it no longer fills in from the service template. In the task card, «Back to automatic» restores it. Tasks created before this feature show the service and the customer, as always.",{"id":5995,"title":5996,"titles":5997,"content":5998,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-a-stage-change-the-task-title","Can a stage change the task title?",[238],"Yes: add “Set title” to the stage (My business → Stages → + Add → Automatic), pick the pieces and whether it applies on enter or on complete. It keeps a title typed by hand unless you tick “Always replace”.",{"id":6000,"title":6001,"titles":6002,"content":6003,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fservicios-y-tareas#can-i-save-my-customers-cars","Can I save my customers' cars?",[238],"Yes. Ask Wagy (\"I want to save my customers' cars\") and each customer gets their vehicles: license plate, make, model, year, mileage and color, with nothing required (the plate or the model is enough). If you don't use it, you see nothing new. If you stop using it, the cars stay saved as read-only. A repair shop or car wash that starts from its industry template already has it on. The cars show up in the customer profile → Vehicles: add them there, set the default one, archive the one that no longer comes and tap «View» for its details and history.",{"id":243,"title":242,"titles":6005,"content":6006,"level":257},[],"How to cancel your Fiuit subscription with one click, how long you keep your plan, how to undo it and what happens to your data. What happens when you want to stop using Fiuit, and where you see it.",{"id":6008,"title":6009,"titles":6010,"content":6011,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#how-do-i-cancel-my-subscription","How do I cancel my subscription?",[242],"Only the project Owner can do it, from Settings → Plan: tap Cancel subscription and confirm. No calls, forms or required reason, and cancelling is never blocked. A Manager sees the screen and who can use it, but not the button.",{"id":6013,"title":6014,"titles":6015,"content":6016,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#how-long-do-i-keep-my-plan-after-cancelling","How long do I keep my plan after cancelling?",[242],"Your plan is not renewed and you are not charged again: you keep using it until the end of the period you already paid. If the date is known, the screen shows it; your data and your project stay the same until then.",{"id":6018,"title":6019,"titles":6020,"content":6021,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#can-i-change-my-mind","Can I change my mind?",[242],"Yes. While the project is not closed, tap Undo cancellation on the same screen and your plan renews again as before. Once the project is closed, write to hola@fiuit.com.",{"id":6023,"title":6024,"titles":6025,"content":6026,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#what-does-we-are-confirming-the-cancellation-mean","What does «We are confirming the cancellation» mean?",[242],"Your cancellation is already recorded; billing only needs to confirm it stopped renewing. You don't need to do anything: it completes on its own and the message goes away.",{"id":6028,"title":6029,"titles":6030,"content":6031,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#what-happens-to-my-data-if-i-cancel","What happens to my data if I cancel?",[242],"Cancelling deletes nothing. You can download your receipts from Finance → Transactions (Export CSV) and your products from My business → Catalog (Export CSV). To request a full copy or the deletion of your data, write to hola@fiuit.com: we reply within 30 days. Payment and financial records are kept for 5 years for tax and accounting obligations. Details are in the privacy policy.",{"id":6033,"title":6034,"titles":6035,"content":6036,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#who-sees-that-i-cancelled-the-subscription","Who sees that I cancelled the subscription?",[242],"The Fiuit team, so your plan is not renewed. Your project records who cancelled or undid it and when.",{"id":6038,"title":6039,"titles":6040,"content":6041,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#what-happens-if-a-customer-asks-to-have-their-data-deleted","What happens if a customer asks to have their data deleted?",[242],"The Fiuit team does it on request (hola@fiuit.com) and tells you first if there are open tasks. Their\nconversations, messages, photo and profile notes are deleted. Their tasks, orders and payments stay for your\nschedule and accounting, but without name, phone or address: in Customers the profile shows no details. If they\nwrite again, they start as a new customer.",{"id":6043,"title":6044,"titles":6045,"content":6046,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#what-happens-if-i-reach-my-plan-limit","What happens if I reach my plan limit?",[242],"The button to connect a channel or invite someone is disabled, with a short text and a link to Settings → Plan to change plan. What you already have keeps working. On Solo that is 2 people with access, 3 resources and 2 connections (with a single WhatsApp number); the Team plan and Pro have higher limits, also with a single WhatsApp number; Business is custom.",{"id":6048,"title":6049,"titles":6050,"content":6051,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#can-i-move-to-a-lower-plan-if-i-have-more-than-it-allows","Can I move to a lower plan if I have more than it allows?",[242],"Not while the business exceeds any limit of the new plan. The plan change screen lists what to remove first (people with access, resources, connections or WhatsApp numbers) with a link to each place. Nothing is deleted automatically.",{"id":6053,"title":6054,"titles":6055,"content":6056,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#who-counts-as-an-operator","Who counts as an operator?",[242],"The people with access to the dashboard and pending invitations. Bookable people without an account do not count. In People you see “People with access: 1 of 2”.",{"id":6058,"title":6059,"titles":6060,"content":6061,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#can-i-remove-made-with-fiuit-from-my-website","Can I remove «Made with Fiuit» from my website?",[242],"On a paid plan, yes: in Customer care → Website untick «Made with Fiuit» and save, or ask Wagy. On the trial plan it always shows. If your project moves to a plan that doesn't allow it, it shows again on its own.",{"id":6063,"title":6064,"titles":6065,"content":6066,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#can-wagy-publish-my-website","Can Wagy publish my website?",[242],"Yes, but never without your confirmation: it shows the before and after and waits for you to confirm; you can undo it afterwards.",{"id":6068,"title":6069,"titles":6070,"content":6071,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#what-is-my-plans-intelligence","What is my plan's Intelligence?",[242],"It's what the bot, Wagy and AI automations use. In Settings → Plan you see how much of the month you've used as a percentage and, at your current pace, the day it lasts until. We let you know at 80% and 100%, and it reloads on its own at the start of every month.",{"id":6073,"title":6074,"titles":6075,"content":6076,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#what-happens-if-this-months-intelligence-runs-out","What happens if this month's Intelligence runs out?",[242],"AI features pause until it reloads; everything else keeps working. If you need more, tap Request more: a top-up lasts only until the end of the month and doesn't carry over.",{"id":6078,"title":6079,"titles":6080,"content":6081,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#how-do-i-ask-fiuit-support-for-help","How do I ask Fiuit support for help?",[242],"Tap Talk to support in the ? help of each screen or in your account menu, or Tell support if you see an error. Wagy tries to solve it first and, if that's not enough, shows you the request with the reason, a summary you can correct, the screen and the error. Nothing is sent until you confirm; support answers in the Wagy chat (and by WhatsApp or email) and you can ask Wagy «how is my case going?».",{"id":6083,"title":6084,"titles":6085,"content":6086,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#what-does-support-see-when-i-ask-for-help","What does support see when I ask for help?",[242],"Your details and your project's (plan, business type, screen, device and the error), and support can enter your account in read-only mode to help you; the access is recorded. It never sees your customers' data or passwords: before sending, the summary is cleared of their names, what they wrote, phones and emails, and you see how it goes out.",{"id":6088,"title":6089,"titles":6090,"content":6091,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#what-happens-if-i-ask-for-help-twice-about-the-same-thing","What happens if I ask for help twice about the same thing?",[242],"If you already have a case open for that reason, the new request is added to it. You can send up to 5 requests per day per project.",{"id":6093,"title":6094,"titles":6095,"content":6096,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#how-often-are-the-instagram-photos-on-my-website-updated","How often are the Instagram photos on my website updated?",[242],"Instagram doesn't tell us when you post, so Fiuit checks every so often depending on your plan: every 24 hours on the basic plans, every 6 on Pro and every 1 on Business, which also has «Update now» (up to 5 times a day). The latest posts show; what you delete on Instagram is deleted from the copy. Set it up in Customer care → Website → Instagram gallery.",{"id":6098,"title":6099,"titles":6100,"content":6101,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#what-happens-to-the-copied-photos-if-i-disconnect-instagram","What happens to the copied photos if I disconnect Instagram?",[242],"All of them are deleted, the records and the images. The same happens if Instagram tells us the authorization was removed. Hiding a photo or unpublishing the website takes it off your website within 1 minute.",{"id":6103,"title":6104,"titles":6105,"content":6106,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#how-do-i-make-an-instagram-photo-lead-to-a-booking","How do I make an Instagram photo lead to a booking?",[242],"In Customer care → Website → Instagram gallery, pick the service under «Book this» below the photo: the photo shows the button and leads to booking that service. For now Wagy can only read the gallery.",{"id":6108,"title":6109,"titles":6110,"content":6111,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#who-sees-the-demo-chip-and-its-controls","Who sees the Demo chip and its controls?",[242],"Every demo member sees the Demo chip beside the project name and can tap it to read the explanation. Only the owner sees Restore demo, with permission to restore and outside read-only mode. Without a baseline snapshot, the explanation says when it will become available.",{"id":6113,"title":6114,"titles":6115,"content":6116,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#how-do-i-report-a-bug-or-an-idea-as-a-partner","How do I report a bug or an idea as a partner?",[242],"In My projects → Reports, choose Bug or Idea, write a description and attach screenshots or videos if needed: PNG, JPEG, WebP, MP4 or WebM, up to 20 MB each, 20 files and 50 MiB in total. The report reaches Fiuit Global Support; the same section shows the stage and attachments of your own reports. Attachments follow the configured retention period (30 days by default). Use the partner panel; Wagy and MCP cannot operate these reports yet.",{"id":6118,"title":6119,"titles":6120,"content":6121,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#can-each-business-have-its-own-account","Can each business have its own account?",[242],"Yes. When you create a project you choose “Which account?”: the current one or “New account (another business)”. The new account has the same plan as the current one, and your projects still count together toward the plan limit. If you are a partner, your client’s project starts in an account for the client, which becomes theirs when they accept as owner.",{"id":6123,"title":6124,"titles":6125,"content":6126,"level":263},"\u002Fdocs\u002Fque-pasa-si\u002Fplan-y-baja#can-a-project-be-moved-to-another-account","Can a project be moved to another account?",[242],"Yes, on request, the Fiuit team does it (hola@fiuit.com). The project keeps its schedule, customers and payments, and takes the plan of the new account. If the previous account belonged to someone else, that person no longer sees it.",{"id":247,"title":246,"titles":6128,"content":6129,"level":257},[],"Connect Claude or ChatGPT to your project with one button, choose what it can do and revoke access whenever you want. With Connect, your AI assistant (Claude or ChatGPT) uses Fiuit with your account, without copying keys. It sees and does what you allow, in the projects you choose, with the same rules as the dashboard. A single connection can cover several businesses.",{"id":6131,"title":6132,"titles":6133,"content":6134,"level":263},"\u002Fdocs\u002Fconectar-tu-ia#from-the-panel-in-one-click","From the panel, in one click",[246],"In Settings → Developers, the Connect your AI card shows ChatGPT, Claude, Gemini, Cursor, VS Code, Kimi and “Other”. For Cursor and VS Code, one button installs the connector. For the rest, it shows the steps and the address https:\u002F\u002Fmcp.fiuit.com\u002F with a Copy button. Some ChatGPT or Claude plans don't allow connectors.",{"id":6136,"title":6137,"titles":6138,"content":6139,"level":263},"\u002Fdocs\u002Fconectar-tu-ia#before-you-start","Before you start",[246],"You must be an owner or manager of the project.The connector address is https:\u002F\u002Fmcp.fiuit.com\u002F. If your app already filled in https:\u002F\u002Fmcp.fiuit.com\u002Fmcp, that works too: same server, same connection.",{"id":6141,"title":6142,"titles":6143,"content":6144,"level":263},"\u002Fdocs\u002Fconectar-tu-ia#claude-desktop-and-claudeai","Claude (Desktop and claude.ai)",[246],"In Claude, open Settings → Connectors and tap Add custom connector.Enter a name (for example, Fiuit) and the address https:\u002F\u002Fmcp.fiuit.com\u002F.Tap Connect: Fiuit opens. If you're not signed in, sign in as usual.On the permissions page, tick one or more projects and the permissions for each, and tap Authorize. You're back in Claude, connected.",{"id":6146,"title":6147,"titles":6148,"content":6149,"level":263},"\u002Fdocs\u002Fconectar-tu-ia#chatgpt","ChatGPT",[246],"In ChatGPT, open Settings → Connectors → Advanced and turn on developer mode.Create a connector with the address https:\u002F\u002Fmcp.fiuit.com\u002F and OAuth authentication.Tap Connect and follow the same steps on the Fiuit permissions page.",{"id":6151,"title":6152,"titles":6153,"content":6154,"level":263},"\u002Fdocs\u002Fconectar-tu-ia#the-permissions-page","The permissions page",[246],"Which app asks for access. Claude and ChatGPT show as Verified. Any other app shows as Not verified, with the address it returns to: authorize it only if you recognize it.Projects. You tick one or more (up to 20) among those where you are owner or manager; the one you have open comes ticked. Each project has its own permissions. If you already had the app connected, the previous projects and permissions come ticked, and what you authorize now replaces the whole previous connection: that is how you add or remove projects.Permissions. The ones the app asks for come checked and you can uncheck any of them: PermissionWhat the AI can doSee your appointments and tasksSee the schedule, open times and each taskCreate and move appointmentsBook, reschedule, cancel and move tasks forwardSee customers \u002F Create and edit customersSee or add customer recordsSee conversations \u002F Reply to conversationsRead or reply in the InboxSee services and settings \u002F Change themSee or change services, products, schedules and stagesSee moneySee payments, balances, cash and resultsRecord payments and send payment linksRecord payments and send payment linksRecord expensesSee and record expenses The last three involve money: only the owner sees them and can grant them, project by project (if you own one business and manage another, money only shows up in the first). An AI can never do more than the person who connected it.\nChanging flows, feedback settings and payment policies also remains owner-only; a manager can delegate service and product changes.",{"id":6156,"title":6157,"titles":6158,"content":6159,"level":263},"\u002Fdocs\u002Fconectar-tu-ia#if-you-are-a-fiuit-partner-your-portfolio-from-your-ai","If you are a Fiuit partner: your portfolio from your AI",[246],"If you are a partner, the permissions page also offers View your partner portfolio: clients and activity. It comes checked only if the app asks for it; otherwise, check it yourself. Pick any project where you are an owner or manager (for example, your own): your portfolio does not depend on the project you pick. With that permission you can ask your AI, for example: \"what should I do today with my clients?\", \"which clients are at risk?\" or \"what happened in my portfolio this week?\". The AI sees the same as your partner panel: Today: the next action, your portfolio progress and alerts.My clients: plan or trial, last use, number of tasks and conversations, and each client's health light.Activity: sign-ups, connected channels, first bookings and clients going quiet. It is read-only, with the same privacy as the panel: counts and statuses, never a business's content or its payments. You see a client's content by opening their project from the panel. You never see another partner's clients. If you stop being a partner, the connection stops showing your portfolio on the next request.",{"id":6161,"title":6162,"titles":6163,"content":6164,"level":263},"\u002Fdocs\u002Fconectar-tu-ia#if-the-ai-says-a-permission-is-missing","If the AI says a permission is missing",[246],"The AI only sees the tools you gave it. If you ask for a balance and it cannot, See money is missing; if it cannot record a cash payment, Record payments and send payment links is missing. Revoke the connection under Connected apps and connect again ticking that permission (money permissions can only be granted by the owner). Editing the products of an order needs no money permission: Create and move appointments is enough. Manually adjusting the amount due is not granted this way: do it from the panel. Cancelling a booking always asks for your confirmation before it runs.",{"id":6166,"title":6167,"titles":6168,"content":6169,"level":263},"\u002Fdocs\u002Fconectar-tu-ia#see-and-revoke-connected-apps","See and revoke connected apps",[246],"In Settings → Developers, under Connected apps, the owner sees each connection of the project: the app, who authorized it, its permissions, when it connected and when it was last used. They only see their own project, not the other businesses of that connection. Revoke cuts access to that project instantly; the other projects of the same connection keep working. Once all are revoked, the AI asks to connect again.",{"id":6171,"title":6172,"titles":6173,"content":6174,"level":263},"\u002Fdocs\u002Fconectar-tu-ia#frequently-asked-questions","Frequently asked questions",[246],"Does the AI keep my password? No. You sign in to Fiuit and the app gets a permission that expires and renews on its own. You can revoke it anytime.What if my role changes? The connection follows your current role in each project: if you become a manager in one, it loses money permissions there; if you leave a project, that one stops working and the others keep going.How does the AI know which business to work on? With a single project, it uses that one. With several, the AI asks or picks with the list_projects tool, and never mixes data from two businesses in one answer.I already had one connection per project, do I need to reconnect? No: previous connections keep working as before, each in its project. If you want a single one, connect again and tick all the projects.Why does someone else see more or fewer tools? The AI only sees the tools for the permissions chosen when connecting: fewer permissions, shorter list.What about API keys? They keep working the same, for your own integrations: MCP and AI agents.",{"id":251,"title":250,"titles":6176,"content":6177,"level":257},[],"Get your project ready with your own AI. It can load your catalog from an Excel file, build the bot and interview you to set up your business. Claude and ChatGPT are good at long tasks: reading an Excel file with 300 products, a PDF menu or your business's old website. Connected to Fiuit, they know how to set up your project well: Fiuit gives them ready-made instructions and a best-practices guide for each business type. AI usage is paid by your Claude or ChatGPT subscription, not by your Fiuit plan.",{"id":6179,"title":6180,"titles":6181,"content":6182,"level":263},"\u002Fdocs\u002Fconfigurar-con-tu-ia#_1-connect-your-ai","1. Connect your AI",[250],"Follow Connect Fiuit to your AI: in Claude or ChatGPT you add the connector https:\u002F\u002Fmcp.fiuit.com\u002F, choose your projects and permissions, and authorize. To set things up, tick See services and settings \u002F Change them. Some changes (flows and payments) stay reserved to the owner.",{"id":6184,"title":6185,"titles":6186,"content":6187,"level":263},"\u002Fdocs\u002Fconfigurar-con-tu-ia#_2-pick-a-ready-made-task","2. Pick a ready-made task",[250],"Fiuit ships instructions in English, Spanish and Portuguese. In Claude they show up next to the Fiuit connector, in the chat's + menu. In ChatGPT you can ask for them in your own words («use the Fiuit guide to…»). TaskWhat it doesSet up my business from scratchA short interview, like Wagy's: how your calendar is organized, your hours, what you sell and how you get paid. Then it creates the services and hours and suggests automations.Build my bot and knowledge baseReads your website, menu or frequent questions and loads short answers, one per topic. It suggests the bot's tone and tests it with typical questions.Import my catalogReads a CSV, Excel file, PDF or photo with your products and services and shows you the preview before loading anything.",{"id":6189,"title":6190,"titles":6191,"content":6192,"level":263},"\u002Fdocs\u002Fconfigurar-con-tu-ia#_3-import-your-catalog-from-a-file","3. Import your catalog from a file",[250],"Give the file to your AI and pick Import my catalog.Your AI reads the file and tells you which column goes to each Fiuit field: name, price, category, unit, synonyms or code.You see the preview: how many products will be created or updated, and every row with an error. Nothing has been loaded yet.If it looks right, say «yes» and everything is imported at once.Changed your mind? Ask it to undo the import: new products are deleted and updated ones go back to how they were. It works for 7 days, as long as nobody edited the catalog afterwards. Up to 2000 products at a time. Prices follow your project's currency, and an ambiguous price («1,500» in reais) is rejected: nothing is guessed.",{"id":6194,"title":6195,"titles":6196,"content":6197,"level":301},"\u002Fdocs\u002Fconfigurar-con-tu-ia#services-in-bulk","Services in bulk",[250,6190],"If your file has services, your AI imports them separately, with the same preview: name, duration in minutes, price and the team that serves it (not needed if you have a single team). Only new services are created: if one already exists with that name, the row is flagged and nothing is overwritten. Up to 200 at a time, and they can be undone for 7 days if nobody changed them.",{"id":6199,"title":3967,"titles":6200,"content":6201,"level":263},"\u002Fdocs\u002Fconfigurar-con-tu-ia#example-requests",[250],"«Here is my hardware store's Excel file: import the products into Fiuit. The \"Desc\" column is the name and \"PVP\" is the price.»«Read this PDF menu and load the dishes as products, with their category.»«Look at my website www.mybusiness.com and build the bot's knowledge base with hours, directions and payment methods.»«I run a car repair shop: set up Fiuit from scratch with your guide for my business type.»",{"id":6203,"title":361,"titles":6204,"content":6205,"level":263},"\u002Fdocs\u002Fconfigurar-con-tu-ia#security",[250],"Preview and confirmation: every load or change is shown first and applied only when you say yes.Can be undone: imports and almost every settings change can be reverted; when something can't, the AI tells you first.Logged: every change is logged with the origin «MCP · Claude» (or your app's name).Only your projects and permissions: the AI can't see or do more than you authorized, and you can revoke access any time.No secrets: the AI never receives your passwords or your integrations' keys.",{"id":6207,"title":3204,"badge":6208,"body":6209,"description":3206,"extension":8241,"meta":8242,"navigation":62,"path":3203,"rawbody":8243,"seo":8244,"stem":8245,"updated":8246,"__hash__":8247},"docs_en\u002Fdocs\u002F10.api\u002F6.reference\u002F14.conversations.md",null,{"type":6210,"value":6211,"toc":8224},"minimark",[6212,6221,6228,6247,6263,6268,6534,6539,6581,6587,6592,6598,6608,6612,6648,6652,6684,6690,6695,6814,6827,6831,6863,6869,6877,6881,6914,6920,6925,6930,6940,6944,7008,7012,7047,7053,7058,7072,7082,7086,7134,7138,7144,7148,7182,7188,7193,7196,7208,7212,7260,7264,7270,7274,7308,7314,7319,7324,7334,7338,7370,7374,7380,7384,7417,7423,7428,7449,7461,7465,7511,7515,7521,7525,7558,7564,7569,7573,7583,7587,7619,7623,7655,7661,7666,7669,7681,7685,7717,7721,7727,7731,7765,7771,7776,7790,7800,7804,7836,7840,7873,7878,7883,7936,7946,7950,7982,7986,8019,8024,8029,8050,8062,8066,8104,8108,8141,8147,8152,8179,8189,8193],[6213,6214,6216,6217],"h2",{"id":6215},"get-conversations","GET ",[6218,6219,6220],"code",{},"\u002Fconversations",[6222,6223,6224],"p",{},[6225,6226,6227],"strong",{},"Listar conversaciones del inbox (más recientes primero)",[6222,6229,6230,6231,6234,6235,6238,6239,6242,6243,6246],{},"Array sin envoltorio; se pagina con ",[6218,6232,6233],{},"limit"," + ",[6218,6236,6237],{},"offset"," (F2-03). El panel lo adapta a ",[6218,6240,6241],{},"Page"," (F3-16). Rol ",[6218,6244,6245],{},"staff"," (F2-52): solo las conversaciones de clientes con tareas vigentes (o cerradas hace menos de 48 h) en un recurso propio; sin tareas, lista vacía. Los filtros se combinan entre sí (AND) y siempre dentro de ese alcance.",[6248,6249,6250,6257],"ul",{},[6251,6252,6253,6256],"li",{},[6225,6254,6255],{},"Authentication:"," API key or dashboard session",[6251,6258,6259,6262],{},[6225,6260,6261],{},"Scopes:"," None",[6222,6264,6265],{},[6225,6266,6267],{},"Parameters",[6269,6270,6271,6293],"table",{},[6272,6273,6274],"thead",{},[6275,6276,6277,6281,6284,6287,6290],"tr",{},[6278,6279,6280],"th",{},"Name",[6278,6282,6283],{},"In",[6278,6285,6286],{},"Required",[6278,6288,6289],{},"Type",[6278,6291,6292],{},"Description",[6294,6295,6296,6324,6349,6373,6394,6414,6444,6468,6499,6517],"tbody",{},[6275,6297,6298,6304,6307,6310,6322],{},[6299,6300,6301],"td",{},[6218,6302,6303],{},"mode",[6299,6305,6306],{},"query",[6299,6308,6309],{},"No",[6299,6311,6312,6315,6316,6315,6319],{},[6218,6313,6314],{},"bot",", ",[6218,6317,6318],{},"human",[6218,6320,6321],{},"paused",[6299,6323],{},[6275,6325,6326,6331,6333,6335,6342],{},[6299,6327,6328],{},[6218,6329,6330],{},"lifecycle",[6299,6332,6306],{},[6299,6334,6309],{},[6299,6336,6337,6338,6341],{},"array\u003C",[6218,6339,6340],{},"ConversationLifecycle",">",[6299,6343,6344,6345,6348],{},"Filtro por estado del ciclo de vida (F2-35). Multi-valor (",[6218,6346,6347],{},"?lifecycle=pending&lifecycle=waiting_team","): une los estados con OR. Valor desconocido: 422.",[6275,6350,6351,6356,6358,6360,6363],{},[6299,6352,6353],{},[6218,6354,6355],{},"channel_type",[6299,6357,6306],{},[6299,6359,6309],{},[6299,6361,6362],{},"array\u003C—>",[6299,6364,6365,6366,6368,6369,6372],{},"Filtro por canal visible (el mismo valor que ",[6218,6367,6355],{}," de cada conversación). Multi-valor (",[6218,6370,6371],{},"?channel_type=whatsapp&channel_type=telegram","): une los canales con OR. Valor desconocido: 422.",[6275,6374,6375,6380,6382,6384,6387],{},[6299,6376,6377],{},[6218,6378,6379],{},"last_message_from",[6299,6381,6306],{},[6299,6383,6309],{},[6299,6385,6386],{},"string (date-time)",[6299,6388,6389,6390,6393],{},"Solo conversaciones cuyo último mensaje (",[6218,6391,6392],{},"last_message_at",") es igual o posterior a este instante (ISO 8601 con zona). Sin mensajes no entra en ningún rango.",[6275,6395,6396,6401,6403,6405,6407],{},[6299,6397,6398],{},[6218,6399,6400],{},"last_message_to",[6299,6402,6306],{},[6299,6404,6309],{},[6299,6406,6386],{},[6299,6408,6409,6410,6413],{},"Solo conversaciones cuyo último mensaje es anterior a este instante (límite exclusivo, ",[6218,6411,6412],{},"[from, to)",").",[6275,6415,6416,6421,6423,6425,6428],{},[6299,6417,6418],{},[6218,6419,6420],{},"bot_paused",[6299,6422,6306],{},[6299,6424,6309],{},[6299,6426,6427],{},"boolean",[6299,6429,6430,6433,6434,6436,6437,6439,6440,6443],{},[6218,6431,6432],{},"true",": el bot no responde (una persona tomó la conversación, ",[6218,6435,6318],{},", o se pausó, ",[6218,6438,6321],{},"). ",[6218,6441,6442],{},"false",": solo las que atiende el bot.",[6275,6445,6446,6451,6453,6455,6457],{},[6299,6447,6448],{},[6218,6449,6450],{},"replied_by_me",[6299,6452,6306],{},[6299,6454,6309],{},[6299,6456,6427],{},[6299,6458,6459,6461,6462,6464,6465,6467],{},[6218,6460,6432],{},": conversaciones donde quien consulta (sesión del panel) mandó al menos un mensaje; ",[6218,6463,6442],{},": las demás. Con API key no hay persona: ",[6218,6466,6432],{}," devuelve una lista vacía.",[6275,6469,6470,6475,6477,6479,6481],{},[6299,6471,6472],{},[6218,6473,6474],{},"needs_attention",[6299,6476,6306],{},[6299,6478,6309],{},[6299,6480,6427],{},[6299,6482,6483,6485,6486,6488,6489,6491,6492,6495,6496,6498],{},[6218,6484,6432],{},": solo las conversaciones que necesitan atención; ",[6218,6487,6442],{},": solo las que no (F3-487). Se calcula en la consulta con la misma regla que el campo ",[6218,6490,6474],{}," y que el conteo de ",[6218,6493,6494],{},"\u002Fconversations\u002Fcounts",", así que paginar con ",[6218,6497,6237],{}," recorre exactamente ese número de conversaciones.",[6275,6500,6501,6505,6507,6509,6515],{},[6299,6502,6503],{},[6218,6504,6233],{},[6299,6506,6306],{},[6299,6508,6309],{},[6299,6510,6511,6512],{},"integer default ",[6218,6513,6514],{},"50",[6299,6516],{},[6275,6518,6519,6523,6525,6527,6532],{},[6299,6520,6521],{},[6218,6522,6237],{},[6299,6524,6306],{},[6299,6526,6309],{},[6299,6528,6511,6529],{},[6218,6530,6531],{},"0",[6299,6533],{},[6222,6535,6536],{},[6225,6537,6538],{},"Responses",[6269,6540,6541,6550],{},[6272,6542,6543],{},[6275,6544,6545,6548],{},[6278,6546,6547],{},"Status",[6278,6549,6292],{},[6294,6551,6552,6568],{},[6275,6553,6554,6559],{},[6299,6555,6556],{},[6218,6557,6558],{},"200",[6299,6560,6561,6562,6564,6565,6567],{},"OK (",[6218,6563,6337],{},"Conversation",[6218,6566,6341],{},")",[6275,6569,6570,6575],{},[6299,6571,6572],{},[6218,6573,6574],{},"default",[6299,6576,6577,6578,6567],{},"Error (RFC 9457) (",[6218,6579,6580],{},"Problem",[6213,6582,6216,6584],{"id":6583},"get-conversationsid",[6218,6585,6586],{},"\u002Fconversations\u002F{id}",[6222,6588,6589],{},[6225,6590,6591],{},"Detalle de una conversación",[6222,6593,6594,6595,6597],{},"Rol ",[6218,6596,6245],{}," (F2-52): conversación de un cliente sin tareas suyas ⇒ 404 (no revela que existe).",[6248,6599,6600,6604],{},[6251,6601,6602,6256],{},[6225,6603,6255],{},[6251,6605,6606,6262],{},[6225,6607,6261],{},[6222,6609,6610],{},[6225,6611,6267],{},[6269,6613,6614,6628],{},[6272,6615,6616],{},[6275,6617,6618,6620,6622,6624,6626],{},[6278,6619,6280],{},[6278,6621,6283],{},[6278,6623,6286],{},[6278,6625,6289],{},[6278,6627,6292],{},[6294,6629,6630],{},[6275,6631,6632,6637,6640,6643,6646],{},[6299,6633,6634],{},[6218,6635,6636],{},"id",[6299,6638,6639],{},"path",[6299,6641,6642],{},"Yes",[6299,6644,6645],{},"string",[6299,6647],{},[6222,6649,6650],{},[6225,6651,6538],{},[6269,6653,6654,6662],{},[6272,6655,6656],{},[6275,6657,6658,6660],{},[6278,6659,6547],{},[6278,6661,6292],{},[6294,6663,6664,6674],{},[6275,6665,6666,6670],{},[6299,6667,6668],{},[6218,6669,6558],{},[6299,6671,6561,6672,6567],{},[6218,6673,6564],{},[6275,6675,6676,6680],{},[6299,6677,6678],{},[6218,6679,6574],{},[6299,6681,6577,6682,6567],{},[6218,6683,6580],{},[6213,6685,6687,6688],{"id":6686},"patch-conversationsid","PATCH ",[6218,6689,6586],{},[6222,6691,6692],{},[6225,6693,6694],{},"Actualizar etiquetas y\u002Fo estado del ciclo de vida de una conversación",[6222,6696,6697,6700,6701,6315,6703,6706,6707,6709,6710,6315,6713,6315,6716,6719,6720,6723,6724,6727,6728,6731,6732,6734,6735,6737,6738,6740,6741,6734,6743,6745,6746,6748,6749,6734,6751,6753,6754,6757,6758,6761,6762,6734,6764,6766,6767,6770,6771,6774,6775,6778,6779,6782,6783,6786,6787,6790,6791,6793,6794,6796,6797,6799,6800,6803,6804,6806,6807,6723,6809,6811,6812,6413],{},[6218,6698,6699],{},"contact_action"," (F3-143) permite release\u002Freport_spam\u002Fblock\u002Funblock solo con sesión owner\u002Fmanager (contacts:moderate; API key 403). No ejecuta ni confirma tareas retenidas. Parcial: al menos uno de ",[6218,6702,6699],{},[6218,6704,6705],{},"tags"," (reemplaza las etiquetas) o ",[6218,6708,6330],{}," (transición manual, F2-35); sin ninguno, 422. Transiciones permitidas: entre ",[6218,6711,6712],{},"pending",[6218,6714,6715],{},"waiting_customer",[6218,6717,6718],{},"waiting_team"," hacia cualquiera de ellas, ",[6218,6721,6722],{},"resolved"," o ",[6218,6725,6726],{},"closed","; ",[6218,6729,6730],{},"open"," solo desde ",[6218,6733,6722],{},"\u002F",[6218,6736,6726],{}," (reabrir); desde ",[6218,6739,6722],{}," también a ",[6218,6742,6712],{},[6218,6744,6726],{},"; desde ",[6218,6747,6726],{}," solo a ",[6218,6750,6730],{},[6218,6752,6712],{},". Otra combinación: 409 ",[6218,6755,6756],{},"lifecycle_transition_not_allowed",". Mismo estado = no-op idempotente (sin evento). ",[6218,6759,6760],{},"resolution_reason"," solo con ",[6218,6763,6722],{},[6218,6765,6726],{}," (422 si no) y se limpia al reabrir. Cada cambio se audita (sin datos personales) y emite ",[6218,6768,6769],{},"conversation.lifecycle_changed",". Roles owner\u002Fmanager\u002Fstaff; viewer 403. API key: scope ",[6218,6772,6773],{},"messages:write",". El ciclo de vida es ortogonal al modo bot\u002Fhumano. ",[6218,6776,6777],{},"lifecycle: resolved"," equivale a ",[6218,6780,6781],{},"POST \u002Fresolve"," sobre el último entrante (fija ",[6218,6784,6785],{},"resolved_at",", emite ",[6218,6788,6789],{},"conversation.resolved","); salir de ",[6218,6792,6722],{}," limpia ",[6218,6795,6785],{},". \"Archivar\" = ",[6218,6798,6726],{}," (sale de la lista principal con ",[6218,6801,6802],{},"?lifecycle="," de los estados activos; \"desarchivar\" = ",[6218,6805,6730],{},"). Un mensaje nuevo del cliente reabre una conversación ",[6218,6808,6722],{},[6218,6810,6726],{}," (pasa a ",[6218,6813,6712],{},[6248,6815,6816,6820],{},[6251,6817,6818,6256],{},[6225,6819,6255],{},[6251,6821,6822,6824,6825],{},[6225,6823,6261],{}," ",[6218,6826,6773],{},[6222,6828,6829],{},[6225,6830,6267],{},[6269,6832,6833,6847],{},[6272,6834,6835],{},[6275,6836,6837,6839,6841,6843,6845],{},[6278,6838,6280],{},[6278,6840,6283],{},[6278,6842,6286],{},[6278,6844,6289],{},[6278,6846,6292],{},[6294,6848,6849],{},[6275,6850,6851,6855,6857,6859,6861],{},[6299,6852,6853],{},[6218,6854,6636],{},[6299,6856,6639],{},[6299,6858,6642],{},[6299,6860,6645],{},[6299,6862],{},[6222,6864,6865,6868],{},[6225,6866,6867],{},"Request body"," (required)",[6248,6870,6871],{},[6251,6872,6873,6876],{},[6218,6874,6875],{},"application\u002Fjson",": object",[6222,6878,6879],{},[6225,6880,6538],{},[6269,6882,6883,6891],{},[6272,6884,6885],{},[6275,6886,6887,6889],{},[6278,6888,6547],{},[6278,6890,6292],{},[6294,6892,6893,6904],{},[6275,6894,6895,6899],{},[6299,6896,6897],{},[6218,6898,6558],{},[6299,6900,6901,6902,6567],{},"Conversación actualizada (",[6218,6903,6564],{},[6275,6905,6906,6910],{},[6299,6907,6908],{},[6218,6909,6574],{},[6299,6911,6577,6912,6567],{},[6218,6913,6580],{},[6213,6915,6216,6917],{"id":6916},"get-conversationsidmessages",[6218,6918,6919],{},"\u002Fconversations\u002F{id}\u002Fmessages",[6222,6921,6922],{},[6225,6923,6924],{},"Mensajes de una conversación (cronológico ascendente)",[6222,6926,6594,6927,6929],{},[6218,6928,6245],{}," (F2-52): conversación de un cliente sin tareas suyas ⇒ 404.",[6248,6931,6932,6936],{},[6251,6933,6934,6256],{},[6225,6935,6255],{},[6251,6937,6938,6262],{},[6225,6939,6261],{},[6222,6941,6942],{},[6225,6943,6267],{},[6269,6945,6946,6960],{},[6272,6947,6948],{},[6275,6949,6950,6952,6954,6956,6958],{},[6278,6951,6280],{},[6278,6953,6283],{},[6278,6955,6286],{},[6278,6957,6289],{},[6278,6959,6292],{},[6294,6961,6962,6976,6992],{},[6275,6963,6964,6968,6970,6972,6974],{},[6299,6965,6966],{},[6218,6967,6636],{},[6299,6969,6639],{},[6299,6971,6642],{},[6299,6973,6645],{},[6299,6975],{},[6275,6977,6978,6982,6984,6986,6990],{},[6299,6979,6980],{},[6218,6981,6233],{},[6299,6983,6306],{},[6299,6985,6309],{},[6299,6987,6511,6988],{},[6218,6989,6514],{},[6299,6991],{},[6275,6993,6994,6999,7001,7003,7005],{},[6299,6995,6996],{},[6218,6997,6998],{},"before",[6299,7000,6306],{},[6299,7002,6309],{},[6299,7004,6386],{},[6299,7006,7007],{},"Solo mensajes anteriores a este instante (paginación hacia atrás)",[6222,7009,7010],{},[6225,7011,6538],{},[6269,7013,7014,7022],{},[6272,7015,7016],{},[6275,7017,7018,7020],{},[6278,7019,6547],{},[6278,7021,6292],{},[6294,7023,7024,7037],{},[6275,7025,7026,7030],{},[6299,7027,7028],{},[6218,7029,6558],{},[6299,7031,6561,7032,7034,7035,6567],{},[6218,7033,6337],{},"Message",[6218,7036,6341],{},[6275,7038,7039,7043],{},[6299,7040,7041],{},[6218,7042,6574],{},[6299,7044,6577,7045,6567],{},[6218,7046,6580],{},[6213,7048,7050,7051],{"id":7049},"post-conversationsidmessages","POST ",[6218,7052,6919],{},[6222,7054,7055],{},[6225,7056,7057],{},"Enviar mensaje manual (pone la conversación en modo humano)",[6222,7059,7060,7061,7063,7064,7067,7068,7071],{},"Persiste una salida delivery_status=pending y el takeover en la misma transacción. El worker entrega después del commit; 201 no confirma aceptación del proveedor. Idempotency-Key opcional deduplica 24 h para sesión de panel y Bearer; una misma clave con otro actor, conversación o texto devuelve 422. Un replay devuelve la respuesta original (puede seguir indicando pending); GET messages muestra el estado actual. Un cliente is_test sólo puede usar simulator, nunca una conexión real. Entrega externa at-least-once: sin idempotencia del proveedor existe ventana ambigua. Rol ",[6218,7062,6245],{}," (F2-52): solo a clientes con tareas vigentes en un recurso propio; otra conversación ⇒ 404 y no se envía nada. 409 ",[6218,7065,7066],{},"channel_paused"," si el dueño pausó ese canal a nivel ",[6218,7069,7070],{},"channel"," (el equipo tampoco envía hasta reanudarlo).",[6248,7073,7074,7078],{},[6251,7075,7076,6256],{},[6225,7077,6255],{},[6251,7079,7080,6262],{},[6225,7081,6261],{},[6222,7083,7084],{},[6225,7085,6267],{},[6269,7087,7088,7102],{},[6272,7089,7090],{},[6275,7091,7092,7094,7096,7098,7100],{},[6278,7093,6280],{},[6278,7095,6283],{},[6278,7097,6286],{},[6278,7099,6289],{},[6278,7101,6292],{},[6294,7103,7104,7118],{},[6275,7105,7106,7110,7112,7114,7116],{},[6299,7107,7108],{},[6218,7109,6636],{},[6299,7111,6639],{},[6299,7113,6642],{},[6299,7115,6645],{},[6299,7117],{},[6275,7119,7120,7125,7128,7130,7132],{},[6299,7121,7122],{},[6218,7123,7124],{},"Idempotency-Key",[6299,7126,7127],{},"header",[6299,7129,6309],{},[6299,7131,6645],{},[6299,7133],{},[6222,7135,7136,6868],{},[6225,7137,6867],{},[6248,7139,7140],{},[6251,7141,7142,6876],{},[6218,7143,6875],{},[6222,7145,7146],{},[6225,7147,6538],{},[6269,7149,7150,7158],{},[6272,7151,7152],{},[6275,7153,7154,7156],{},[6278,7155,6547],{},[6278,7157,6292],{},[6294,7159,7160,7172],{},[6275,7161,7162,7167],{},[6299,7163,7164],{},[6218,7165,7166],{},"201",[6299,7168,7169,7170,6567],{},"Persistido, pendiente de despacho durable (",[6218,7171,7034],{},[6275,7173,7174,7178],{},[6299,7175,7176],{},[6218,7177,6574],{},[6299,7179,6577,7180,6567],{},[6218,7181,6580],{},[6213,7183,7050,7185],{"id":7184},"post-conversationsidmessagesmessage_idintent",[6218,7186,7187],{},"\u002Fconversations\u002F{id}\u002Fmessages\u002F{message_id}\u002Fintent",[6222,7189,7190],{},[6225,7191,7192],{},"Registrar una intención explícitamente clasificada por el operador",[6222,7194,7195],{},"Owner\u002Fmanager con sesión y CSRF, o API key messages:write. Mensaje entrante real de esta conversación y tenant. Clasificación cerrada e inmutable; mismo valor es replay y distinto devuelve 409. No usa texto LLM, no ejecuta la intención ni modifica estado de reservas.",[6248,7197,7198,7202],{},[6251,7199,7200,6256],{},[6225,7201,6255],{},[6251,7203,7204,6824,7206],{},[6225,7205,6261],{},[6218,7207,6773],{},[6222,7209,7210],{},[6225,7211,6267],{},[6269,7213,7214,7228],{},[6272,7215,7216],{},[6275,7217,7218,7220,7222,7224,7226],{},[6278,7219,6280],{},[6278,7221,6283],{},[6278,7223,6286],{},[6278,7225,6289],{},[6278,7227,6292],{},[6294,7229,7230,7244],{},[6275,7231,7232,7236,7238,7240,7242],{},[6299,7233,7234],{},[6218,7235,6636],{},[6299,7237,6639],{},[6299,7239,6642],{},[6299,7241,6645],{},[6299,7243],{},[6275,7245,7246,7251,7253,7255,7258],{},[6299,7247,7248],{},[6218,7249,7250],{},"message_id",[6299,7252,6639],{},[6299,7254,6642],{},[6299,7256,7257],{},"string (uuid)",[6299,7259],{},[6222,7261,7262,6868],{},[6225,7263,6867],{},[6248,7265,7266],{},[6251,7267,7268,6876],{},[6218,7269,6875],{},[6222,7271,7272],{},[6225,7273,6538],{},[6269,7275,7276,7284],{},[6272,7277,7278],{},[6275,7279,7280,7282],{},[6278,7281,6547],{},[6278,7283,6292],{},[6294,7285,7286,7298],{},[6275,7287,7288,7292],{},[6299,7289,7290],{},[6218,7291,6558],{},[6299,7293,7294,7295,6567],{},"Clasificación persistida (o replay) (",[6218,7296,7297],{},"MessageIntent",[6275,7299,7300,7304],{},[6299,7301,7302],{},[6218,7303,6574],{},[6299,7305,6577,7306,6567],{},[6218,7307,6580],{},[6213,7309,7050,7311],{"id":7310},"post-conversationsidmode",[6218,7312,7313],{},"\u002Fconversations\u002F{id}\u002Fmode",[6222,7315,7316],{},[6225,7317,7318],{},"Cambiar el modo (takeover \u002F devolver al bot \u002F pausar)",[6222,7320,6594,7321,7323],{},[6218,7322,6245],{}," (F2-52): solo conversaciones de sus clientes; otra ⇒ 404.",[6248,7325,7326,7330],{},[6251,7327,7328,6256],{},[6225,7329,6255],{},[6251,7331,7332,6262],{},[6225,7333,6261],{},[6222,7335,7336],{},[6225,7337,6267],{},[6269,7339,7340,7354],{},[6272,7341,7342],{},[6275,7343,7344,7346,7348,7350,7352],{},[6278,7345,6280],{},[6278,7347,6283],{},[6278,7349,6286],{},[6278,7351,6289],{},[6278,7353,6292],{},[6294,7355,7356],{},[6275,7357,7358,7362,7364,7366,7368],{},[6299,7359,7360],{},[6218,7361,6636],{},[6299,7363,6639],{},[6299,7365,6642],{},[6299,7367,6645],{},[6299,7369],{},[6222,7371,7372,6868],{},[6225,7373,6867],{},[6248,7375,7376],{},[6251,7377,7378,6876],{},[6218,7379,6875],{},[6222,7381,7382],{},[6225,7383,6538],{},[6269,7385,7386,7394],{},[6272,7387,7388],{},[6275,7389,7390,7392],{},[6278,7391,6547],{},[6278,7393,6292],{},[6294,7395,7396,7407],{},[6275,7397,7398,7402],{},[6299,7399,7400],{},[6218,7401,6558],{},[6299,7403,6561,7404,6567],{},[6218,7405,7406],{},"object",[6275,7408,7409,7413],{},[6299,7410,7411],{},[6218,7412,6574],{},[6299,7414,6577,7415,6567],{},[6218,7416,6580],{},[6213,7418,7050,7420],{"id":7419},"post-conversationsidnotes",[6218,7421,7422],{},"\u002Fconversations\u002F{id}\u002Fnotes",[6222,7424,7425],{},[6225,7426,7427],{},"Agregar un aviso de sistema a la conversación (nunca se envía al cliente)",[6222,7429,7430,7431,7434,7435,7438,7439,7441,7442,7444,7445,7448],{},"F3-222. Deja un mensaje ",[6218,7432,7433],{},"type=system"," en el hilo (p. ej. el contexto de un caso de soporte): nace ",[6218,7436,7437],{},"delivery_status=sent",", sin destinatario, así que el worker nunca lo despacha por el canal. No cambia el modo (bot\u002Fhumano) ni el ciclo de vida y no cuenta como respuesta del equipo. Roles owner\u002Fmanager (sesión con CSRF) o API key con ",[6218,7440,6773],{},"; tenant desde la credencial; 404 si la conversación no es de este proyecto. Idempotente por contenido: el mismo texto ya presente como aviso en la conversación devuelve ese aviso (sin otro mensaje ni otra auditoría), con cualquier clave o key. Con API key, ",[6218,7443,7124],{}," además deduplica 24 h (la misma clave con otro cuerpo da 409). Auditado ",[6218,7446,7447],{},"conversation.system_note"," (solo el largo del texto).",[6248,7450,7451,7455],{},[6251,7452,7453,6256],{},[6225,7454,6255],{},[6251,7456,7457,6824,7459],{},[6225,7458,6261],{},[6218,7460,6773],{},[6222,7462,7463],{},[6225,7464,6267],{},[6269,7466,7467,7481],{},[6272,7468,7469],{},[6275,7470,7471,7473,7475,7477,7479],{},[6278,7472,6280],{},[6278,7474,6283],{},[6278,7476,6286],{},[6278,7478,6289],{},[6278,7480,6292],{},[6294,7482,7483,7497],{},[6275,7484,7485,7489,7491,7493,7495],{},[6299,7486,7487],{},[6218,7488,6636],{},[6299,7490,6639],{},[6299,7492,6642],{},[6299,7494,6645],{},[6299,7496],{},[6275,7498,7499,7503,7505,7507,7509],{},[6299,7500,7501],{},[6218,7502,7124],{},[6299,7504,7127],{},[6299,7506,6309],{},[6299,7508,6645],{},[6299,7510],{},[6222,7512,7513,6868],{},[6225,7514,6867],{},[6248,7516,7517],{},[6251,7518,7519,6876],{},[6218,7520,6875],{},[6222,7522,7523],{},[6225,7524,6538],{},[6269,7526,7527,7535],{},[6272,7528,7529],{},[6275,7530,7531,7533],{},[6278,7532,6547],{},[6278,7534,6292],{},[6294,7536,7537,7548],{},[6275,7538,7539,7543],{},[6299,7540,7541],{},[6218,7542,7166],{},[6299,7544,7545,7546,6567],{},"Aviso guardado en el hilo (",[6218,7547,7034],{},[6275,7549,7550,7554],{},[6299,7551,7552],{},[6218,7553,6574],{},[6299,7555,6577,7556,6567],{},[6218,7557,6580],{},[6213,7559,7050,7561],{"id":7560},"post-conversationsidread",[6218,7562,7563],{},"\u002Fconversations\u002F{id}\u002Fread",[6222,7565,7566],{},[6225,7567,7568],{},"Marcar la conversación como leída",[6222,7570,6594,7571,7323],{},[6218,7572,6245],{},[6248,7574,7575,7579],{},[6251,7576,7577,6256],{},[6225,7578,6255],{},[6251,7580,7581,6262],{},[6225,7582,6261],{},[6222,7584,7585],{},[6225,7586,6267],{},[6269,7588,7589,7603],{},[6272,7590,7591],{},[6275,7592,7593,7595,7597,7599,7601],{},[6278,7594,6280],{},[6278,7596,6283],{},[6278,7598,6286],{},[6278,7600,6289],{},[6278,7602,6292],{},[6294,7604,7605],{},[6275,7606,7607,7611,7613,7615,7617],{},[6299,7608,7609],{},[6218,7610,6636],{},[6299,7612,6639],{},[6299,7614,6642],{},[6299,7616,6645],{},[6299,7618],{},[6222,7620,7621],{},[6225,7622,6538],{},[6269,7624,7625,7633],{},[6272,7626,7627],{},[6275,7628,7629,7631],{},[6278,7630,6547],{},[6278,7632,6292],{},[6294,7634,7635,7645],{},[6275,7636,7637,7641],{},[6299,7638,7639],{},[6218,7640,6558],{},[6299,7642,6561,7643,6567],{},[6218,7644,7406],{},[6275,7646,7647,7651],{},[6299,7648,7649],{},[6218,7650,6574],{},[6299,7652,6577,7653,6567],{},[6218,7654,6580],{},[6213,7656,7050,7658],{"id":7657},"post-conversationsidresolve",[6218,7659,7660],{},"\u002Fconversations\u002F{id}\u002Fresolve",[6222,7662,7663],{},[6225,7664,7665],{},"Resolver explícitamente la conversación leída",[6222,7667,7668],{},"Owner\u002Fmanager con sesión y CSRF, o API key messages:write. Tenant de la credencial. message_id debe ser el último entrante persistido del tenant; snapshot obsoleto devuelve 409. Repetir sobre el mismo mensaje no cambia fecha ni duplica audit\u002Fevento. Una nueva entrada real reabre; un replay del webhook no reabre. No cambia el modo ni ejecuta reservas.",[6248,7670,7671,7675],{},[6251,7672,7673,6256],{},[6225,7674,6255],{},[6251,7676,7677,6824,7679],{},[6225,7678,6261],{},[6218,7680,6773],{},[6222,7682,7683],{},[6225,7684,6267],{},[6269,7686,7687,7701],{},[6272,7688,7689],{},[6275,7690,7691,7693,7695,7697,7699],{},[6278,7692,6280],{},[6278,7694,6283],{},[6278,7696,6286],{},[6278,7698,6289],{},[6278,7700,6292],{},[6294,7702,7703],{},[6275,7704,7705,7709,7711,7713,7715],{},[6299,7706,7707],{},[6218,7708,6636],{},[6299,7710,6639],{},[6299,7712,6642],{},[6299,7714,6645],{},[6299,7716],{},[6222,7718,7719,6868],{},[6225,7720,6867],{},[6248,7722,7723],{},[6251,7724,7725,6876],{},[6218,7726,6875],{},[6222,7728,7729],{},[6225,7730,6538],{},[6269,7732,7733,7741],{},[6272,7734,7735],{},[6275,7736,7737,7739],{},[6278,7738,6547],{},[6278,7740,6292],{},[6294,7742,7743,7755],{},[6275,7744,7745,7749],{},[6299,7746,7747],{},[6218,7748,6558],{},[6299,7750,7751,7752,6567],{},"Resuelto (o replay de la misma resolución) (",[6218,7753,7754],{},"ConversationResolution",[6275,7756,7757,7761],{},[6299,7758,7759],{},[6218,7760,6574],{},[6299,7762,6577,7763,6567],{},[6218,7764,6580],{},[6213,7766,6216,7768],{"id":7767},"get-conversationsidsummary",[6218,7769,7770],{},"\u002Fconversations\u002F{id}\u002Fsummary",[6222,7772,7773],{},[6225,7774,7775],{},"Último resumen con IA de la conversación (sin llamar al LLM)",[6222,7777,7778,7779,7782,7783,7786,7787,7789],{},"Owner, manager y staff. Devuelve el resumen guardado (",[6218,7780,7781],{},"summary: null"," si nunca se generó) y ",[6218,7784,7785],{},"stale: true"," si llegaron mensajes después. Nunca consume IA. Rol ",[6218,7788,6245],{}," (F2-52): conversación de un cliente sin tareas suyas ⇒ 404. Viewer ⇒ 403.",[6248,7791,7792,7796],{},[6251,7793,7794,6256],{},[6225,7795,6255],{},[6251,7797,7798,6262],{},[6225,7799,6261],{},[6222,7801,7802],{},[6225,7803,6267],{},[6269,7805,7806,7820],{},[6272,7807,7808],{},[6275,7809,7810,7812,7814,7816,7818],{},[6278,7811,6280],{},[6278,7813,6283],{},[6278,7815,6286],{},[6278,7817,6289],{},[6278,7819,6292],{},[6294,7821,7822],{},[6275,7823,7824,7828,7830,7832,7834],{},[6299,7825,7826],{},[6218,7827,6636],{},[6299,7829,6639],{},[6299,7831,6642],{},[6299,7833,6645],{},[6299,7835],{},[6222,7837,7838],{},[6225,7839,6538],{},[6269,7841,7842,7850],{},[6272,7843,7844],{},[6275,7845,7846,7848],{},[6278,7847,6547],{},[6278,7849,6292],{},[6294,7851,7852,7863],{},[6275,7853,7854,7858],{},[6299,7855,7856],{},[6218,7857,6558],{},[6299,7859,6561,7860,6567],{},[6218,7861,7862],{},"ConversationSummary",[6275,7864,7865,7869],{},[6299,7866,7867],{},[6218,7868,6574],{},[6299,7870,6577,7871,6567],{},[6218,7872,6580],{},[6213,7874,7050,7876],{"id":7875},"post-conversationsidsummary",[6218,7877,7770],{},[6222,7879,7880],{},[6225,7881,7882],{},"Resumir la conversación con IA (acotado y cacheado)",[6222,7884,7885,7886,7889,7890,6315,7893,7896,7897,7900,7901,7903,7904,7907,7908,7911,7912,7915,7916,7919,7920,7923,7924,7927,7928,7931,7932,7935],{},"Owner, manager y staff con sesión de panel y CSRF. Texto de lectura para el equipo: el LLM no decide nada. Pasa por el AI gateway (cuota del proyecto, pausa de IA manual y por spam, freno de ráfaga, registro de uso ",[6218,7887,7888],{},"summary.conversation","). Solo se leen los últimos 40 mensajes, con tope de caracteres de entrada y 2048 tokens de salida (incluido razonamiento), con un único reintento de hasta 4096 tokens si el contenido llega vacío; los teléfonos y emails se enmascaran (",[6218,7891,7892],{},"[tel]",[6218,7894,7895],{},"[email]",") antes y después. El último resumen se guarda con el id del último mensaje considerado: sin mensajes nuevos se devuelve el guardado (",[6218,7898,7899],{},"cached: true",") sin llamar al LLM, aunque la IA esté pausada. Rol ",[6218,7902,6245],{},": fuera de su alcance ⇒ 404. 409 ",[6218,7905,7906],{},"ai_paused"," (pausa del dueño o ",[6218,7909,7910],{},"auto_spam","), 429 ",[6218,7913,7914],{},"ai_limit_reached"," (cuota) y demás ",[6218,7917,7918],{},"ai_*"," de admisión, 409 ",[6218,7921,7922],{},"ai_unavailable"," (key pendiente), 422 ",[6218,7925,7926],{},"conversation_empty"," (sin texto), 502 ",[6218,7929,7930],{},"ai_provider_unavailable"," (error del proveedor, detail con tipo\u002Fstatus\u002Fmotivo seguros) o ",[6218,7933,7934],{},"ai_empty_response"," (modelo sin texto tras dos intentos).",[6248,7937,7938,7942],{},[6251,7939,7940,6256],{},[6225,7941,6255],{},[6251,7943,7944,6262],{},[6225,7945,6261],{},[6222,7947,7948],{},[6225,7949,6267],{},[6269,7951,7952,7966],{},[6272,7953,7954],{},[6275,7955,7956,7958,7960,7962,7964],{},[6278,7957,6280],{},[6278,7959,6283],{},[6278,7961,6286],{},[6278,7963,6289],{},[6278,7965,6292],{},[6294,7967,7968],{},[6275,7969,7970,7974,7976,7978,7980],{},[6299,7971,7972],{},[6218,7973,6636],{},[6299,7975,6639],{},[6299,7977,6642],{},[6299,7979,6645],{},[6299,7981],{},[6222,7983,7984],{},[6225,7985,6538],{},[6269,7987,7988,7996],{},[6272,7989,7990],{},[6275,7991,7992,7994],{},[6278,7993,6547],{},[6278,7995,6292],{},[6294,7997,7998,8009],{},[6275,7999,8000,8004],{},[6299,8001,8002],{},[6218,8003,6558],{},[6299,8005,8006,8007,6567],{},"Resumen vigente (generado ahora o reutilizado) (",[6218,8008,7862],{},[6275,8010,8011,8015],{},[6299,8012,8013],{},[6218,8014,6574],{},[6299,8016,6577,8017,6567],{},[6218,8018,6580],{},[6213,8020,6216,8022],{"id":8021},"get-conversationscounts",[6218,8023,6494],{},[6222,8025,8026],{},[6225,8027,8028],{},"Contadores de conversaciones por estado del ciclo de vida",[6222,8030,8031,8032,8034,8035,8038,8039,8042,8043,8045,8046,8049],{},"Cantidad de conversaciones por ",[6218,8033,6330],{}," (siempre las seis claves, con 0) y ",[6218,8036,8037],{},"total",", para los contadores de la Bandeja. Excluye las sesiones de prueba (",[6218,8040,8041],{},"is_test","), igual que la lista. ",[6218,8044,6303],{}," opcional restringe por modo bot\u002Fhumano. Lectura para cualquier rol; API key: scope ",[6218,8047,8048],{},"messages:read"," (F2-35).",[6248,8051,8052,8056],{},[6251,8053,8054,6256],{},[6225,8055,6255],{},[6251,8057,8058,6824,8060],{},[6225,8059,6261],{},[6218,8061,8048],{},[6222,8063,8064],{},[6225,8065,6267],{},[6269,8067,8068,8082],{},[6272,8069,8070],{},[6275,8071,8072,8074,8076,8078,8080],{},[6278,8073,6280],{},[6278,8075,6283],{},[6278,8077,6286],{},[6278,8079,6289],{},[6278,8081,6292],{},[6294,8083,8084],{},[6275,8085,8086,8090,8092,8094,8102],{},[6299,8087,8088],{},[6218,8089,6303],{},[6299,8091,6306],{},[6299,8093,6309],{},[6299,8095,8096,6315,8098,6315,8100],{},[6218,8097,6314],{},[6218,8099,6318],{},[6218,8101,6321],{},[6299,8103],{},[6222,8105,8106],{},[6225,8107,6538],{},[6269,8109,8110,8118],{},[6272,8111,8112],{},[6275,8113,8114,8116],{},[6278,8115,6547],{},[6278,8117,6292],{},[6294,8119,8120,8131],{},[6275,8121,8122,8126],{},[6299,8123,8124],{},[6218,8125,6558],{},[6299,8127,6561,8128,6567],{},[6218,8129,8130],{},"ConversationLifecycleCounts",[6275,8132,8133,8137],{},[6299,8134,8135],{},[6218,8136,6574],{},[6299,8138,6577,8139,6567],{},[6218,8140,6580],{},[6213,8142,6216,8144],{"id":8143},"get-conversationsstream",[6218,8145,8146],{},"\u002Fconversations\u002Fstream",[6222,8148,8149],{},[6225,8150,8151],{},"Avisos en vivo del inbox (SSE)",[6222,8153,8154,8157,8158,6315,8161,8164,8165,8168,8169,8172,8173,8175,8176,8178],{},[6218,8155,8156],{},"text\u002Fevent-stream",". Eventos ",[6218,8159,8160],{},"message.received",[6218,8162,8163],{},"message.sent"," y ",[6218,8166,8167],{},"conversation.updated"," con\n",[6218,8170,8171],{},"{event, workspace_id, conversation_id, mode, lifecycle, unread_count, channel_type, message_id?, direction?}",". ",[6218,8174,6355],{}," es null si la conversación ya fue eliminada. Son avisos:\nel cliente vuelve a pedir la lista y los mensajes. Rol ",[6218,8177,6245],{}," (F2-52): solo recibe los avisos de las\nconversaciones que puede ver en ese momento; el resto se descarta en el servidor.",[6248,8180,8181,8185],{},[6251,8182,8183,6256],{},[6225,8184,6255],{},[6251,8186,8187,6262],{},[6225,8188,6261],{},[6222,8190,8191],{},[6225,8192,6538],{},[6269,8194,8195,8203],{},[6272,8196,8197],{},[6275,8198,8199,8201],{},[6278,8200,6547],{},[6278,8202,6292],{},[6294,8204,8205,8214],{},[6275,8206,8207,8211],{},[6299,8208,8209],{},[6218,8210,6558],{},[6299,8212,8213],{},"Stream abierto",[6275,8215,8216,8220],{},[6299,8217,8218],{},[6218,8219,6574],{},[6299,8221,6577,8222,6567],{},[6218,8223,6580],{},{"title":8225,"searchDepth":263,"depth":301,"links":8226},"",[8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240],{"id":6215,"depth":263,"text":3209},{"id":6583,"depth":263,"text":3214},{"id":6686,"depth":263,"text":3219},{"id":6916,"depth":263,"text":3224},{"id":7049,"depth":263,"text":3229},{"id":7184,"depth":263,"text":3234},{"id":7310,"depth":263,"text":3239},{"id":7419,"depth":263,"text":3244},{"id":7560,"depth":263,"text":3249},{"id":7657,"depth":263,"text":3254},{"id":7767,"depth":263,"text":3259},{"id":7875,"depth":263,"text":3264},{"id":8021,"depth":263,"text":3269},{"id":8143,"depth":263,"text":3274},"md",{},"---\ntitle: \"API · conversations\"\ndescription: \"conversations operations in the OpenAPI contract that accept an API key.\"\nupdated: \"2026-11-03\"\nnavigation: false\n---\n## GET `\u002Fconversations`\n\n**Listar conversaciones del inbox (más recientes primero)**\n\nArray sin envoltorio; se pagina con `limit` + `offset` (F2-03). El panel lo adapta a `Page` (F3-16). Rol `staff` (F2-52): solo las conversaciones de clientes con tareas vigentes (o cerradas hace menos de 48 h) en un recurso propio; sin tareas, lista vacía. Los filtros se combinan entre sí (AND) y siempre dentro de ese alcance.\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** None\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `mode` | query | No | `bot`, `human`, `paused` |  |\n| `lifecycle` | query | No | array\u003C`ConversationLifecycle`> | Filtro por estado del ciclo de vida (F2-35). Multi-valor (`?lifecycle=pending&lifecycle=waiting_team`): une los estados con OR. Valor desconocido: 422. |\n| `channel_type` | query | No | array\u003C—> | Filtro por canal visible (el mismo valor que `channel_type` de cada conversación). Multi-valor (`?channel_type=whatsapp&channel_type=telegram`): une los canales con OR. Valor desconocido: 422. |\n| `last_message_from` | query | No | string (date-time) | Solo conversaciones cuyo último mensaje (`last_message_at`) es igual o posterior a este instante (ISO 8601 con zona). Sin mensajes no entra en ningún rango. |\n| `last_message_to` | query | No | string (date-time) | Solo conversaciones cuyo último mensaje es anterior a este instante (límite exclusivo, `[from, to)`). |\n| `bot_paused` | query | No | boolean | `true`: el bot no responde (una persona tomó la conversación, `human`, o se pausó, `paused`). `false`: solo las que atiende el bot. |\n| `replied_by_me` | query | No | boolean | `true`: conversaciones donde quien consulta (sesión del panel) mandó al menos un mensaje; `false`: las demás. Con API key no hay persona: `true` devuelve una lista vacía. |\n| `needs_attention` | query | No | boolean | `true`: solo las conversaciones que necesitan atención; `false`: solo las que no (F3-487). Se calcula en la consulta con la misma regla que el campo `needs_attention` y que el conteo de `\u002Fconversations\u002Fcounts`, así que paginar con `offset` recorre exactamente ese número de conversaciones. |\n| `limit` | query | No | integer default `50` |  |\n| `offset` | query | No | integer default `0` |  |\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | OK (`array\u003C`Conversation`>`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## GET `\u002Fconversations\u002F{id}`\n\n**Detalle de una conversación**\n\nRol `staff` (F2-52): conversación de un cliente sin tareas suyas ⇒ 404 (no revela que existe).\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** None\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | OK (`Conversation`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## PATCH `\u002Fconversations\u002F{id}`\n\n**Actualizar etiquetas y\u002Fo estado del ciclo de vida de una conversación**\n\n`contact_action` (F3-143) permite release\u002Freport_spam\u002Fblock\u002Funblock solo con sesión owner\u002Fmanager (contacts:moderate; API key 403). No ejecuta ni confirma tareas retenidas. Parcial: al menos uno de `contact_action`, `tags` (reemplaza las etiquetas) o `lifecycle` (transición manual, F2-35); sin ninguno, 422. Transiciones permitidas: entre `pending`, `waiting_customer`, `waiting_team` hacia cualquiera de ellas, `resolved` o `closed`; `open` solo desde `resolved`\u002F`closed` (reabrir); desde `resolved` también a `pending`\u002F`closed`; desde `closed` solo a `open`\u002F`pending`. Otra combinación: 409 `lifecycle_transition_not_allowed`. Mismo estado = no-op idempotente (sin evento). `resolution_reason` solo con `resolved`\u002F`closed` (422 si no) y se limpia al reabrir. Cada cambio se audita (sin datos personales) y emite `conversation.lifecycle_changed`. Roles owner\u002Fmanager\u002Fstaff; viewer 403. API key: scope `messages:write`. El ciclo de vida es ortogonal al modo bot\u002Fhumano. `lifecycle: resolved` equivale a `POST \u002Fresolve` sobre el último entrante (fija `resolved_at`, emite `conversation.resolved`); salir de `resolved` limpia `resolved_at`. \"Archivar\" = `closed` (sale de la lista principal con `?lifecycle=` de los estados activos; \"desarchivar\" = `open`). Un mensaje nuevo del cliente reabre una conversación `resolved` o `closed` (pasa a `pending`).\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** `messages:write`\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n\n**Request body** (required)\n\n- `application\u002Fjson`: object\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | Conversación actualizada (`Conversation`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## GET `\u002Fconversations\u002F{id}\u002Fmessages`\n\n**Mensajes de una conversación (cronológico ascendente)**\n\nRol `staff` (F2-52): conversación de un cliente sin tareas suyas ⇒ 404.\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** None\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n| `limit` | query | No | integer default `50` |  |\n| `before` | query | No | string (date-time) | Solo mensajes anteriores a este instante (paginación hacia atrás) |\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | OK (`array\u003C`Message`>`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## POST `\u002Fconversations\u002F{id}\u002Fmessages`\n\n**Enviar mensaje manual (pone la conversación en modo humano)**\n\nPersiste una salida delivery_status=pending y el takeover en la misma transacción. El worker entrega después del commit; 201 no confirma aceptación del proveedor. Idempotency-Key opcional deduplica 24 h para sesión de panel y Bearer; una misma clave con otro actor, conversación o texto devuelve 422. Un replay devuelve la respuesta original (puede seguir indicando pending); GET messages muestra el estado actual. Un cliente is_test sólo puede usar simulator, nunca una conexión real. Entrega externa at-least-once: sin idempotencia del proveedor existe ventana ambigua. Rol `staff` (F2-52): solo a clientes con tareas vigentes en un recurso propio; otra conversación ⇒ 404 y no se envía nada. 409 `channel_paused` si el dueño pausó ese canal a nivel `channel` (el equipo tampoco envía hasta reanudarlo).\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** None\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n| `Idempotency-Key` | header | No | string |  |\n\n**Request body** (required)\n\n- `application\u002Fjson`: object\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `201` | Persistido, pendiente de despacho durable (`Message`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## POST `\u002Fconversations\u002F{id}\u002Fmessages\u002F{message_id}\u002Fintent`\n\n**Registrar una intención explícitamente clasificada por el operador**\n\nOwner\u002Fmanager con sesión y CSRF, o API key messages:write. Mensaje entrante real de esta conversación y tenant. Clasificación cerrada e inmutable; mismo valor es replay y distinto devuelve 409. No usa texto LLM, no ejecuta la intención ni modifica estado de reservas.\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** `messages:write`\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n| `message_id` | path | Yes | string (uuid) |  |\n\n**Request body** (required)\n\n- `application\u002Fjson`: object\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | Clasificación persistida (o replay) (`MessageIntent`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## POST `\u002Fconversations\u002F{id}\u002Fmode`\n\n**Cambiar el modo (takeover \u002F devolver al bot \u002F pausar)**\n\nRol `staff` (F2-52): solo conversaciones de sus clientes; otra ⇒ 404.\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** None\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n\n**Request body** (required)\n\n- `application\u002Fjson`: object\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | OK (`object`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## POST `\u002Fconversations\u002F{id}\u002Fnotes`\n\n**Agregar un aviso de sistema a la conversación (nunca se envía al cliente)**\n\nF3-222. Deja un mensaje `type=system` en el hilo (p. ej. el contexto de un caso de soporte): nace `delivery_status=sent`, sin destinatario, así que el worker nunca lo despacha por el canal. No cambia el modo (bot\u002Fhumano) ni el ciclo de vida y no cuenta como respuesta del equipo. Roles owner\u002Fmanager (sesión con CSRF) o API key con `messages:write`; tenant desde la credencial; 404 si la conversación no es de este proyecto. Idempotente por contenido: el mismo texto ya presente como aviso en la conversación devuelve ese aviso (sin otro mensaje ni otra auditoría), con cualquier clave o key. Con API key, `Idempotency-Key` además deduplica 24 h (la misma clave con otro cuerpo da 409). Auditado `conversation.system_note` (solo el largo del texto).\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** `messages:write`\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n| `Idempotency-Key` | header | No | string |  |\n\n**Request body** (required)\n\n- `application\u002Fjson`: object\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `201` | Aviso guardado en el hilo (`Message`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## POST `\u002Fconversations\u002F{id}\u002Fread`\n\n**Marcar la conversación como leída**\n\nRol `staff` (F2-52): solo conversaciones de sus clientes; otra ⇒ 404.\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** None\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | OK (`object`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## POST `\u002Fconversations\u002F{id}\u002Fresolve`\n\n**Resolver explícitamente la conversación leída**\n\nOwner\u002Fmanager con sesión y CSRF, o API key messages:write. Tenant de la credencial. message_id debe ser el último entrante persistido del tenant; snapshot obsoleto devuelve 409. Repetir sobre el mismo mensaje no cambia fecha ni duplica audit\u002Fevento. Una nueva entrada real reabre; un replay del webhook no reabre. No cambia el modo ni ejecuta reservas.\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** `messages:write`\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n\n**Request body** (required)\n\n- `application\u002Fjson`: object\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | Resuelto (o replay de la misma resolución) (`ConversationResolution`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## GET `\u002Fconversations\u002F{id}\u002Fsummary`\n\n**Último resumen con IA de la conversación (sin llamar al LLM)**\n\nOwner, manager y staff. Devuelve el resumen guardado (`summary: null` si nunca se generó) y `stale: true` si llegaron mensajes después. Nunca consume IA. Rol `staff` (F2-52): conversación de un cliente sin tareas suyas ⇒ 404. Viewer ⇒ 403.\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** None\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | OK (`ConversationSummary`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## POST `\u002Fconversations\u002F{id}\u002Fsummary`\n\n**Resumir la conversación con IA (acotado y cacheado)**\n\nOwner, manager y staff con sesión de panel y CSRF. Texto de lectura para el equipo: el LLM no decide nada. Pasa por el AI gateway (cuota del proyecto, pausa de IA manual y por spam, freno de ráfaga, registro de uso `summary.conversation`). Solo se leen los últimos 40 mensajes, con tope de caracteres de entrada y 2048 tokens de salida (incluido razonamiento), con un único reintento de hasta 4096 tokens si el contenido llega vacío; los teléfonos y emails se enmascaran (`[tel]`, `[email]`) antes y después. El último resumen se guarda con el id del último mensaje considerado: sin mensajes nuevos se devuelve el guardado (`cached: true`) sin llamar al LLM, aunque la IA esté pausada. Rol `staff`: fuera de su alcance ⇒ 404. 409 `ai_paused` (pausa del dueño o `auto_spam`), 429 `ai_limit_reached` (cuota) y demás `ai_*` de admisión, 409 `ai_unavailable` (key pendiente), 422 `conversation_empty` (sin texto), 502 `ai_provider_unavailable` (error del proveedor, detail con tipo\u002Fstatus\u002Fmotivo seguros) o `ai_empty_response` (modelo sin texto tras dos intentos).\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** None\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `id` | path | Yes | string |  |\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | Resumen vigente (generado ahora o reutilizado) (`ConversationSummary`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## GET `\u002Fconversations\u002Fcounts`\n\n**Contadores de conversaciones por estado del ciclo de vida**\n\nCantidad de conversaciones por `lifecycle` (siempre las seis claves, con 0) y `total`, para los contadores de la Bandeja. Excluye las sesiones de prueba (`is_test`), igual que la lista. `mode` opcional restringe por modo bot\u002Fhumano. Lectura para cualquier rol; API key: scope `messages:read` (F2-35).\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** `messages:read`\n\n**Parameters**\n\n| Name | In | Required | Type | Description |\n| --- | --- | --- | --- | --- |\n| `mode` | query | No | `bot`, `human`, `paused` |  |\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | OK (`ConversationLifecycleCounts`) |\n| `default` | Error (RFC 9457) (`Problem`) |\n\n## GET `\u002Fconversations\u002Fstream`\n\n**Avisos en vivo del inbox (SSE)**\n\n`text\u002Fevent-stream`. Eventos `message.received`, `message.sent` y `conversation.updated` con\n`{event, workspace_id, conversation_id, mode, lifecycle, unread_count, channel_type, message_id?, direction?}`. `channel_type` es null si la conversación ya fue eliminada. Son avisos:\nel cliente vuelve a pedir la lista y los mensajes. Rol `staff` (F2-52): solo recibe los avisos de las\nconversaciones que puede ver en ese momento; el resto se descarta en el servidor.\n\n- **Authentication:** API key or dashboard session\n- **Scopes:** None\n\n**Responses**\n\n| Status | Description |\n| --- | --- |\n| `200` | Stream abierto |\n| `default` | Error (RFC 9457) (`Problem`) |\n",{"title":3204,"description":3206},"docs\u002F10.api\u002F6.reference\u002F14.conversations","2026-11-03","k4PmsCHaSdWtEwwGtWGbqi1-YnYpFVBuOWR43H47BkI",[6208,6208],1793683955231]