diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php
index 05755d8d..06f79bfe 100644
--- a/.php-cs-fixer.php
+++ b/.php-cs-fixer.php
@@ -27,6 +27,7 @@
->in(__DIR__ . '/src/Services/Sale/')
->in(__DIR__ . '/src/Services/Disk/')
->in(__DIR__ . '/src/Services/Calendar/')
+ ->in(__DIR__ . '/src/Services/Booking/')
->in(__DIR__ . '/src/Services/Lists/')
->in(__DIR__ . '/src/Services/SonetGroup/')
->name('*.php')
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bf21c905..357ab530 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,8 @@
### Added
+- Added `Services\Booking\BookingServiceBuilder` with Booking scope wrappers and integration coverage for `booking.v1.clienttype.*`, `booking.v1.resourceType.*`, `booking.v1.resource.*`, `booking.v1.resource.slots.*`, `booking.v1.waitlist.*`, `booking.v1.waitlist.client.*`, `booking.v1.waitlist.externalData.*`, `booking.v1.booking.*`, `booking.v1.booking.client.*`, and `booking.v1.booking.externalData.*` methods.
+
### Changed
### Fixed
diff --git a/Makefile b/Makefile
index 397095ac..9f4d792e 100644
--- a/Makefile
+++ b/Makefile
@@ -71,6 +71,7 @@ help:
@echo "test-integration-sale-payment-item-basket - run PaymentItemBasket integration tests"
@echo "test-integration-sale-payment-item-shipment - run PaymentItemShipment integration tests"
@echo "test-integration-sale-property-relation - run PropertyRelation integration tests"
+ @echo "test-integration-scope-booking - run Booking integration tests"
@echo "test-integration-landing-page - run Landing Page integration tests"
@echo "test-integration-landing-syspage - run Landing SysPage integration tests"
@echo "test-integration-landing-repo - run Landing Repo integration tests"
@@ -405,6 +406,10 @@ test-integration-landing-role:
test-integration-scope-sonet-group:
docker compose run --rm php-cli vendor/bin/phpunit --testsuite integration_tests_scope_sonet_group
+.PHONY: test-integration-scope-booking
+test-integration-scope-booking:
+ docker compose run --rm php-cli vendor/bin/phpunit --testsuite integration_tests_scope_booking
+
.PHONY: test-integration-scope-disk
test-integration-scope-disk:
docker compose run --rm php-cli vendor/bin/phpunit --testsuite integration_tests_scope_disk
diff --git a/docs/open-api/openapi.json b/docs/open-api/openapi.json
index fe104d63..40c43983 100644
--- a/docs/open-api/openapi.json
+++ b/docs/open-api/openapi.json
@@ -1 +1 @@
-{"openapi":"3.0.0","info":{"title":"Bitrix24 REST V3 API","version":"1.0.0"},"servers":[],"tags":[{"name":"humanresources","description":"humanresources module methods"},{"name":"mail","description":"mail module methods"},{"name":"main","description":"main module methods"},{"name":"note","description":"note module methods"},{"name":"rest","description":"rest module methods"},{"name":"tasks","description":"tasks module methods"},{"name":"timeman","description":"timeman module methods"},{"name":"vibecodeconnector","description":"vibecodeconnector module methods"}],"paths":{"\/humanresources.node.communication.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","name","type","structureId","parentId","description","accessCode","userCount","colorName","xmlId","createdAt","updatedAt","members"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.communication.edit":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.member.move":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.member.remove":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.member.add":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.member.set":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.employee.search":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["userId","name","workPosition","avatar","url","departments","teams"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.humanresources.employeedto"}}}}}}}}}},"\/humanresources.employee.subordinates":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["userId","name","workPosition","avatar","url","departments","teams"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.employee.count":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.employee.multidepartment":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.get":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","name","type","structureId","parentId","description","accessCode","userCount","colorName","xmlId","createdAt","updatedAt","members"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.humanresources.nodedto"}}}}}}}}}}},"\/humanresources.node.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","name","type","structureId","parentId","description","accessCode","userCount","colorName","xmlId","createdAt","updatedAt","members"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"name":{"type":"string","example":"ASC"},"createdAt":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.humanresources.nodedto"}}}}}}}}}},"\/humanresources.node.search":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","name","type","structureId","parentId","description","accessCode","userCount","colorName","xmlId","createdAt","updatedAt","members"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"name":{"type":"string","example":"ASC"},"createdAt":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.humanresources.nodedto"}}}}}}}}}},"\/humanresources.node.count":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.children":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","name","type","structureId","parentId","description","accessCode","userCount","colorName","xmlId","createdAt","updatedAt","members"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.humanresources.nodedto"}}}}}}}}}},"\/humanresources.node.add":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.edit":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.move":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.mailbox.get":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","name","email","senderName"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.mail.mailboxdto"}}}}}}}}}}},"\/mail.mailbox.list":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","name","email","senderName"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.mail.mailboxdto"}}}}}}}}}},"\/mail.mailbox.senders":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","name","email","senderName"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.mail.mailboxdto"}}}}}}}}}},"\/mail.message.get":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","mailboxId","mailboxEmail","subject","from","to","cc","date","isSeen","hasAttachments","url","bindings","body"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.mail.messagedto"}}}}}}}}}}},"\/mail.message.list":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","mailboxId","mailboxEmail","subject","from","to","cc","date","isSeen","hasAttachments","url","bindings","body"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.mail.messagedto"}}}}}}}}}},"\/mail.message.send":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.reply":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.forward":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.createcrmactivity":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/mail.message.removecrmactivity":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/mail.message.thread":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","mailboxId","mailboxEmail","subject","from","to","cc","date","isSeen","hasAttachments","url","bindings","body"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.movetofolder":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.createtask":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.createcalendarevent":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.createchat":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.createfeedpost":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.recipient.listcontacts":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","email","name"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.mail.recipientdto"}}}}}}}}}},"\/mail.recipient.listemployees":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","email","name"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.mail.recipientdto"}}}}}}}}}},"\/main.eventlog.list":{"post":{"summary":"Метод получения списка","description":"Получить список записей по выбору","tags":["main"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","timestampX","severity","auditTypeId","moduleId","itemId","remoteAddr","userAgent","requestUri","siteId","userId","guestId","description"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"timestampX":{"type":"string","example":"ASC"},"auditTypeId":{"type":"string","example":"ASC"},"userId":{"type":"string","example":"ASC"},"guestId":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.main.eventlogdto"}}}}}}}}}},"\/main.eventlog.get":{"post":{"summary":"Метод получения элемента","description":"Получить конкретную запись по идентификатору","tags":["main"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","timestampX","severity","auditTypeId","moduleId","itemId","remoteAddr","userAgent","requestUri","siteId","userId","guestId","description"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.main.eventlogdto"}}}}}}}}}}},"\/main.eventlog.tail":{"post":{"summary":"Метод отслеживания","description":"Получить последние записи","tags":["main"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","timestampX","severity","auditTypeId","moduleId","itemId","remoteAddr","userAgent","requestUri","siteId","userId","guestId","description"]},"filter":{"type":"array"},"cursor":{"type":"object","example":{"field":"id","value":0,"order":"ASC"}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.main.eventlogdto"}}}}}}}}}},"\/note.document.search.list":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"query":{"type":"string","example":"string"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}},"required":["query"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/note.document.tree.list":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"collectionId":{"type":"integer","example":1}},"required":["collectionId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/note.collection.list":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/note.document.get":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.note.documentitemdto"}}}}}}}}}}},"\/rest.documentation.openapi":{"post":{"summary":"Документация Open API","description":"Метод для получения документации продукта в Open API формате","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"summary":"Документация Open API","description":"Метод для получения документации продукта в Open API формате","tags":["rest"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/rest.scope.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"filterModule":{"type":"string","example":"string"},"filterController":{"type":"string","example":"string"},"filterMethod":{"type":"string","example":"string"}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.communication.field.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/humanresources.node.communication.field.get":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/humanresources.node.member.field.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/humanresources.node.member.field.get":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/humanresources.employee.field.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/humanresources.employee.field.get":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/humanresources.node.field.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/humanresources.node.field.get":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/mail.mailbox.field.list":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/mail.mailbox.field.get":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/mail.message.field.list":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/mail.message.field.get":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/mail.recipient.field.list":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/mail.recipient.field.get":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/main.eventlog.field.list":{"post":{"tags":["main"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/main.eventlog.field.get":{"post":{"tags":["main"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/note.document.search.field.list":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/note.document.search.field.get":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/note.document.tree.field.list":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/note.document.tree.field.get":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/note.collection.field.list":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/note.collection.field.get":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/note.document.field.list":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/note.document.field.get":{"post":{"tags":["note"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.access.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.access.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.embedding.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.embedding.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.local.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.local.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.personal.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.personal.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.placement.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.placement.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.incomingwebhook.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.incomingwebhook.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/tasks.task.chat.message.field.list":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/tasks.task.chat.message.field.get":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/tasks.task.result.field.list":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/tasks.task.result.field.get":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/tasks.task.field.list":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/tasks.task.field.get":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/timeman.record.field.list":{"post":{"tags":["timeman"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/timeman.record.field.get":{"post":{"tags":["timeman"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/vibecodeconnector.catalog.item.access.field.list":{"post":{"tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/vibecodeconnector.catalog.item.access.field.get":{"post":{"tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/vibecodeconnector.catalog.item.field.list":{"post":{"tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/vibecodeconnector.catalog.item.field.get":{"post":{"tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.portal.license.get":{"post":{"summary":"Gets portal license information","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"summary":"Gets portal license information","tags":["rest"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/rest.application.access.set":{"post":{"summary":"Устанавливает коды доступа для приложения","description":"Replaces all existing access codes for the application with the provided ones.\n\t\tFor personal applications, the owner user access code is always added to the saved access codes.\n\t\tAccess codes define which users or groups can use the application.\n\t\tAdministrators and personal application owners always have access regardless of access codes.\n\t\tFor shared applications, if no access codes are set, the application is available to everyone.\n\t\tFor personal applications, if no access codes are set, only the owner and administrators have access.\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022,\n\t\t\t\u0022codes\u0022: [\u0022UA\u0022, \u0022D1\u0022]\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"codes":{"type":"array","items":{"type":"string"}}},"required":["clientId","codes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.access.delete":{"post":{"summary":"Удаляет коды доступа приложения","description":"Removes specified access codes from the application.\n\t\tOnly the provided codes are removed; other existing codes remain unchanged.\n\t\tAdministrators and personal application owners always have access regardless of access codes.\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022,\n\t\t\t\u0022codes\u0022: [\u0022D1\u0022]\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"codes":{"type":"array","items":{"type":"string"}}},"required":["clientId","codes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.access.reset":{"post":{"summary":"Сбрасывает доступ приложения к значениям по умолчанию","description":"Removes all custom access codes and restores the default access settings for the application.\n\t\tFor personal applications, the default is the owner and administrators only.\n\t\tFor shared applications, the default is no restrictions (available to everyone).\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.access.get":{"post":{"summary":"Возвращает коды доступа приложения","description":"Returns the current access codes assigned to the application,\n\t\tincluding detailed information about each code (provider and display name).\n\t\tAdministrators and personal application owners always have access regardless of access codes.\n\t\tFor shared applications, if no access codes are set, the application is available to everyone.\n\t\tFor personal applications, if no access codes are set, only the owner and administrators have access.\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["clientId","codes","codesDetails"]}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.accessdto"}}}}}}}}}}},"\/rest.application.embedding.list":{"post":{"summary":"Возвращает список мест встроек приложения","description":"Request example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["id","userId","placement","handler","title","description","groupName","additional","options","languages"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.embeddingdto"}}}}}}}}}},"\/rest.application.embedding.add":{"post":{"summary":"Добавляет новое место встройки для приложения","description":"Request example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022,\n\t\t\t\u0022placement\u0022: \u0022IM_CONTEXT_MENU\u0022,\n\t\t\t\u0022handler\u0022: \u0022https:\/\/example.com\/embed\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"placement":{"type":"string","example":"string"},"handler":{"type":"string","example":"string"},"userId":{"type":"integer","example":1},"title":{"type":"string","example":"string"},"description":{"type":"string","example":"string"},"groupName":{"type":"string","example":"string"},"settings":{"type":"array"},"languages":{"type":"array"}},"required":["clientId","placement","handler","userId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.embedding.delete":{"post":{"summary":"Удаляет место встройки","description":"If `handler` is provided, only the embedding with that handler will be deleted.\n\t\tIf `userId` is provided, only the embedding for that user will be deleted.\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022,\n\t\t\t\u0022placement\u0022:\u0022IM_CONTEXT_MENU\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"placement":{"type":"string","example":"string"},"handler":{"type":"string","example":"string"},"userId":{"type":"integer","example":1}},"required":["clientId","placement"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/rest.application.local.install":{"post":{"summary":"Устанавливает локальное общее приложение","description":"Request example:\n\t\t{\n\t\t\t\u0022title\u0022: \u0022Test application\u0022,\n\t\t\t\u0022handlerUrl\u0022: \u0022https:\/\/example.com\u0022,\n\t\t\t\u0022scopes\u0022: [\u0022crm\u0022],\n\t\t\t\u0022mobile\u0022: false,\n\t\t\t\u0022menuTitles\u0022: {\n\t\t\t\t\u0022en\u0022: \u0022Test application\u0022\n\t\t\t}\n\t\t}\n\t\tIf `menuTitles` is omitted, the application is installed as API-only: \n\t\tit is not shown in the Bitrix24 interface, and its only way to access the portal is through the REST API, \n\t\tbut it can still add embeddings.","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string","example":"string"},"handlerUrl":{"type":"string","example":"string"},"scopes":{"type":"array"},"mobile":{"type":"boolean","example":true},"menuTitles":{"type":"array"},"clientId":{"type":"string","example":"string"},"applicationToken":{"type":"string","example":"string"},"attributes":{"type":"array"},"select":{"type":"array","items":{"type":"string"},"example":["id","clientId","clientSecret","applicationToken","scopes","title","url","urlInstall","urlSettings","mobile","version","active","installed","dateCreate","dateInstall","attributes"]}},"required":["title","handlerUrl","scopes","mobile","menuTitles","attributes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.appdto"},"oauthToken":{"$ref":"#\/components\/schemas\/bitrix.rest.oauthtokendto"}}}}}}}}}}},"\/rest.application.local.uninstall":{"post":{"summary":"Удаляет локальное общее приложение","description":"Request example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.personal.install":{"post":{"summary":"Устанавливает локальное персональное приложение","description":"Request example:\n\t\t{\n\t\t\t\u0022title\u0022: \u0022Test application\u0022,\n\t\t\t\u0022handlerUrl\u0022: \u0022https:\/\/example.com\u0022,\n\t\t\t\u0022scopes\u0022: [\u0022crm\u0022],\n\t\t\t\u0022mobile\u0022: false,\n\t\t\t\u0022menuTitles\u0022: {\n\t\t\t\t\u0022en\u0022: \u0022Test application\u0022\n\t\t\t}\n\t\t}\n\t\tIf `menuTitles` is omitted, the application is installed as API-only: \n\t\tit is not shown in the Bitrix24 interface, and its only way to access the portal is through the REST API, \n\t\tbut it can still add embeddings.","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string","example":"string"},"handlerUrl":{"type":"string","example":"string"},"scopes":{"type":"array"},"mobile":{"type":"boolean","example":true},"menuTitles":{"type":"array"},"clientId":{"type":"string","example":"string"},"applicationToken":{"type":"string","example":"string"},"attributes":{"type":"array"},"select":{"type":"array","items":{"type":"string"},"example":["id","clientId","clientSecret","applicationToken","scopes","title","url","urlInstall","urlSettings","mobile","version","active","installed","dateCreate","dateInstall","attributes"]}},"required":["title","handlerUrl","scopes","mobile","menuTitles","attributes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.appdto"},"oauthToken":{"$ref":"#\/components\/schemas\/bitrix.rest.oauthtokendto"}}}}}}}}}}},"\/rest.application.personal.uninstall":{"post":{"summary":"Удаляет локальное персональное приложение","description":"Request example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.placement.list":{"post":{"summary":"Возвращает список доступных мест встраивания","description":"If `scope` is provided, only placements for that scope are returned, and other parameters are ignored.\n\t\tIf `showAll` is `true`, all available placements are returned.\n\t\tIf `clientId` is provided, only placements available to that application are returned.\n\t\tIf no parameters are provided, all available placements are returned.\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"scope":{"type":"string","example":"string"},"showAll":{"type":"boolean","example":true}},"required":["showAll"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/rest.application.getbyclientid":{"post":{"summary":"Получает приложение по OAuth client ID","description":"Request example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["id","clientId","clientSecret","applicationToken","scopes","title","url","urlInstall","urlSettings","mobile","version","active","installed","dateCreate","dateInstall","attributes"]}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.appdto"}}}}}}}}}}},"\/rest.application.list":{"post":{"summary":"Возвращает список установленных приложений","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"attributes":{"type":"array"},"select":{"type":"array","items":{"type":"string"},"example":["id","clientId","clientSecret","applicationToken","scopes","title","url","urlInstall","urlSettings","mobile","version","active","installed","dateCreate","dateInstall","attributes"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"clientId":{"type":"string","example":"ASC"},"title":{"type":"string","example":"ASC"},"version":{"type":"string","example":"ASC"},"dateCreate":{"type":"string","example":"ASC"},"dateInstall":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}},"required":["attributes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.appdto"}}}}}}}}}},"\/rest.incomingwebhook.add":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string","example":"string"},"scopes":{"type":"array"},"attributes":{"type":"array"},"select":{"type":"array","items":{"type":"string"},"example":["url","scopes","title","active","userId","dateCreate","attributes"]}},"required":["title","scopes","attributes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.incomingwebhookdto"}}}}}}}}}}},"\/rest.incomingwebhook.update":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"fields":{"type":"object","properties":{"scopes":{"type":"array"},"title":{"type":"string"}}}},"required":["id","fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.incomingwebhook.delete":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.incomingwebhook.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["url","scopes","title","active","userId","dateCreate","attributes"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"dateCreate":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.incomingwebhookdto"}}}}}}}}}},"\/tasks.task.access.get":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/tasks.task.file.attach":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"taskId":{"type":"integer","example":1},"fileIds":{"type":"array"}},"required":["taskId","fileIds"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/tasks.task.chat.message.send":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","properties":{"taskId":{"type":"integer","format":"int64"},"text":{"type":"string"}},"required":["taskId","text"]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/tasks.task.result.add":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","properties":{"taskId":{"type":"integer","format":"int64"},"text":{"type":"string"}},"required":["taskId","text"]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.tasks.resultdto"}}}}}}}}}}},"\/tasks.task.result.addfromchatmessage":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","properties":{"text":{"type":"string"},"messageId":{"type":"integer","format":"int64"}},"required":["messageId"]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.tasks.resultdto"}}}}}}}}}}},"\/tasks.task.result.update":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"fields":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.tasks.resultdto"}}}}}}}}}}},"\/tasks.task.result.delete":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/tasks.task.result.list":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"select":{"type":"array","items":{"type":"string"},"example":["id","taskId","text","authorId","createdAt","updatedAt","status","fileIds","rights","messageId"]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"authorId":{"type":"string","example":"ASC"},"createdAt":{"type":"string","example":"ASC"},"updatedAt":{"type":"string","example":"ASC"},"status":{"type":"string","example":"ASC"},"messageId":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.resultdto"}}}}}}}}}},"\/tasks.task.update":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"fields":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"responsibleId":{"type":"integer","format":"int64"},"deadline":{"type":"string","format":"date-time"},"needsControl":{"type":"boolean"},"startPlan":{"type":"string","format":"date-time"},"endPlan":{"type":"string","format":"date-time"},"fileIds":{"type":"array"},"checklist":{"type":"array"},"groupId":{"type":"integer","format":"int64"},"stageId":{"type":"integer","format":"int64"},"epicId":{"type":"integer","format":"int64"},"storyPoints":{"type":"integer","format":"int64"},"flowId":{"type":"integer","format":"int64"},"priority":{"type":"string"},"status":{"type":"string"},"statusChanged":{"type":"string","format":"date-time"},"parentId":{"type":"integer","format":"int64"},"containsChecklist":{"type":"boolean"},"containsSubTasks":{"type":"boolean"},"containsRelatedTasks":{"type":"boolean"},"containsGanttLinks":{"type":"boolean"},"containsPlacements":{"type":"boolean"},"containsResults":{"type":"boolean"},"numberOfReminders":{"type":"integer","format":"int64"},"chatId":{"type":"integer","format":"int64"},"plannedDuration":{"type":"integer","format":"int64"},"actualDuration":{"type":"integer","format":"int64"},"durationType":{"type":"string"},"started":{"type":"string","format":"date-time"},"estimatedTime":{"type":"integer","format":"int64"},"replicate":{"type":"boolean"},"changed":{"type":"string","format":"date-time"},"changedById":{"type":"integer","format":"int64"},"statusChangedById":{"type":"integer","format":"int64"},"closedById":{"type":"integer","format":"int64"},"closed":{"type":"string","format":"date-time"},"activity":{"type":"string","format":"date-time"},"guid":{"type":"string"},"xmlId":{"type":"string"},"exchangeId":{"type":"string"},"exchangeModified":{"type":"string"},"outlookVersion":{"type":"integer","format":"int64"},"mark":{"type":"string"},"allowsChangeDeadline":{"type":"boolean"},"allowsTimeTracking":{"type":"boolean"},"matchesWorkTime":{"type":"boolean"},"addInReport":{"type":"boolean"},"isMultitask":{"type":"boolean"},"siteId":{"type":"string"},"forkedByTemplateId":{"type":"integer","format":"int64"},"deadlineCount":{"type":"integer","format":"int64"},"declineReason":{"type":"string"},"forumTopicId":{"type":"integer","format":"int64"},"link":{"type":"string"},"rights":{"type":"array"},"archiveLink":{"type":"string"},"crmItemIds":{"type":"array"},"reminders":{"type":"array"},"requireResult":{"type":"boolean"},"matchesSubTasksTime":{"type":"boolean"},"autocompleteSubTasks":{"type":"boolean"},"allowsChangeDatePlan":{"type":"boolean"},"emailId":{"type":"integer","format":"int64"},"maxDeadlineChangeDate":{"type":"string","format":"date-time"},"maxDeadlineChanges":{"type":"integer","format":"int64"},"requireDeadlineChangeReason":{"type":"boolean"},"inFavorite":{"type":"array"},"inPin":{"type":"array"},"inGroupPin":{"type":"array"},"inMute":{"type":"array"},"dependsOn":{"type":"array"},"scenarios":{"type":"array"}}},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/tasks.task.delete":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/tasks.task.add":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"creatorId":{"type":"integer","format":"int64"},"responsibleId":{"type":"integer","format":"int64"},"deadline":{"type":"string","format":"date-time"},"needsControl":{"type":"boolean"},"startPlan":{"type":"string","format":"date-time"},"endPlan":{"type":"string","format":"date-time"},"fileIds":{"type":"array"},"checklist":{"type":"array"},"groupId":{"type":"integer","format":"int64"},"stageId":{"type":"integer","format":"int64"},"epicId":{"type":"integer","format":"int64"},"storyPoints":{"type":"integer","format":"int64"},"flowId":{"type":"integer","format":"int64"},"priority":{"type":"string"},"status":{"type":"string"},"statusChanged":{"type":"string","format":"date-time"},"parentId":{"type":"integer","format":"int64"},"containsChecklist":{"type":"boolean"},"containsSubTasks":{"type":"boolean"},"containsRelatedTasks":{"type":"boolean"},"containsGanttLinks":{"type":"boolean"},"containsPlacements":{"type":"boolean"},"containsResults":{"type":"boolean"},"numberOfReminders":{"type":"integer","format":"int64"},"chatId":{"type":"integer","format":"int64"},"plannedDuration":{"type":"integer","format":"int64"},"actualDuration":{"type":"integer","format":"int64"},"durationType":{"type":"string"},"started":{"type":"string","format":"date-time"},"estimatedTime":{"type":"integer","format":"int64"},"replicate":{"type":"boolean"},"changed":{"type":"string","format":"date-time"},"changedById":{"type":"integer","format":"int64"},"statusChangedById":{"type":"integer","format":"int64"},"closedById":{"type":"integer","format":"int64"},"closed":{"type":"string","format":"date-time"},"activity":{"type":"string","format":"date-time"},"guid":{"type":"string"},"xmlId":{"type":"string"},"exchangeId":{"type":"string"},"exchangeModified":{"type":"string"},"outlookVersion":{"type":"integer","format":"int64"},"mark":{"type":"string"},"allowsChangeDeadline":{"type":"boolean"},"allowsTimeTracking":{"type":"boolean"},"matchesWorkTime":{"type":"boolean"},"addInReport":{"type":"boolean"},"isMultitask":{"type":"boolean"},"siteId":{"type":"string"},"forkedByTemplateId":{"type":"integer","format":"int64"},"deadlineCount":{"type":"integer","format":"int64"},"declineReason":{"type":"string"},"forumTopicId":{"type":"integer","format":"int64"},"link":{"type":"string"},"rights":{"type":"array"},"archiveLink":{"type":"string"},"crmItemIds":{"type":"array"},"reminders":{"type":"array"},"requireResult":{"type":"boolean"},"matchesSubTasksTime":{"type":"boolean"},"autocompleteSubTasks":{"type":"boolean"},"allowsChangeDatePlan":{"type":"boolean"},"emailId":{"type":"integer","format":"int64"},"maxDeadlineChangeDate":{"type":"string","format":"date-time"},"maxDeadlineChanges":{"type":"integer","format":"int64"},"requireDeadlineChangeReason":{"type":"boolean"},"inFavorite":{"type":"array"},"inPin":{"type":"array"},"inGroupPin":{"type":"array"},"inMute":{"type":"array"},"dependsOn":{"type":"array"},"scenarios":{"type":"array"}},"required":["title","creatorId","responsibleId"]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto"}}}}}}}}}}},"\/tasks.task.get":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","title","description","creatorId","created","responsibleId","deadline","needsControl","startPlan","endPlan","fileIds","checklist","groupId","stageId","epicId","storyPoints","flowId","priority","status","statusChanged","parentId","containsChecklist","containsSubTasks","containsRelatedTasks","containsGanttLinks","containsPlacements","containsResults","numberOfReminders","chatId","plannedDuration","actualDuration","durationType","started","estimatedTime","replicate","changed","changedById","statusChangedById","closedById","closed","activity","guid","xmlId","exchangeId","exchangeModified","outlookVersion","mark","allowsChangeDeadline","allowsTimeTracking","matchesWorkTime","addInReport","isMultitask","siteId","forkedByTemplateId","deadlineCount","declineReason","forumTopicId","link","rights","archiveLink","crmItemIds","crmItems","reminders","elapsedTime","requireResult","matchesSubTasksTime","autocompleteSubTasks","allowsChangeDatePlan","emailId","maxDeadlineChangeDate","maxDeadlineChanges","requireDeadlineChangeReason","inFavorite","inPin","inGroupPin","inMute","source","dependsOn","scenarios"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto"}}}}}}}}}}},"\/tasks.task.list":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","title","description","creatorId","created","responsibleId","deadline","needsControl","startPlan","endPlan","fileIds","checklist","groupId","stageId","epicId","storyPoints","flowId","priority","status","statusChanged","parentId","containsChecklist","containsSubTasks","containsRelatedTasks","containsGanttLinks","containsPlacements","containsResults","numberOfReminders","chatId","plannedDuration","actualDuration","durationType","started","estimatedTime","replicate","changed","changedById","statusChangedById","closedById","closed","activity","guid","xmlId","exchangeId","exchangeModified","outlookVersion","mark","allowsChangeDeadline","allowsTimeTracking","matchesWorkTime","addInReport","isMultitask","siteId","forkedByTemplateId","deadlineCount","declineReason","forumTopicId","link","rights","archiveLink","crmItemIds","crmItems","reminders","elapsedTime","requireResult","matchesSubTasksTime","autocompleteSubTasks","allowsChangeDatePlan","emailId","maxDeadlineChangeDate","maxDeadlineChanges","requireDeadlineChangeReason","inFavorite","inPin","inGroupPin","inMute","source","dependsOn","scenarios"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"title":{"type":"string","example":"ASC"},"creatorId":{"type":"string","example":"ASC"},"created":{"type":"string","example":"ASC"},"responsibleId":{"type":"string","example":"ASC"},"deadline":{"type":"string","example":"ASC"},"startPlan":{"type":"string","example":"ASC"},"endPlan":{"type":"string","example":"ASC"},"groupId":{"type":"string","example":"ASC"},"priority":{"type":"string","example":"ASC"},"status":{"type":"string","example":"ASC"},"started":{"type":"string","example":"ASC"},"estimatedTime":{"type":"string","example":"ASC"},"changed":{"type":"string","example":"ASC"},"closed":{"type":"string","example":"ASC"},"activity":{"type":"string","example":"ASC"},"mark":{"type":"string","example":"ASC"},"allowsChangeDeadline":{"type":"string","example":"ASC"},"allowsTimeTracking":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto"}}}}}}}}}},"\/timeman.record.list":{"post":{"tags":["timeman"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"select":{"type":"array","items":{"type":"string"},"example":["id","userId","startTime","endTime","duration","breakLength","state","isApproved"]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"userId":{"type":"string","example":"ASC"},"startTime":{"type":"string","example":"ASC"},"endTime":{"type":"string","example":"ASC"},"duration":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.timeman.recorddto"}}}}}}}}}},"\/vibecodeconnector.catalog.item.access.set":{"post":{"description":"Replaces all ACL access codes for a catalog item owned by the current REST user","tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"catalogItemId":{"type":"integer","example":1},"accessCodes":{"type":"array"}},"required":["catalogItemId","accessCodes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/vibecodeconnector.catalog.item.add":{"post":{"description":"Creates a catalog item owned by the current REST user","tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string","example":"string"},"type":{"type":"string","example":"string"},"accessType":{"type":"string","example":"string"},"description":{"type":"string","example":"string"},"editUrl":{"type":"string","example":"string"},"viewUrl":{"type":"string","example":"string"},"chatId":{"type":"integer","example":1},"externalId":{"type":"string","example":"string"}},"required":["title","type","accessType"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"integer","format":"int64"}}}}}}}}}}},"\/vibecodeconnector.catalog.item.update":{"post":{"description":"Updates editable fields of a catalog item owned by the current REST user","tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"catalogItemId":{"type":"integer","example":1},"fields":{"type":"object","properties":{"title":{"type":"string"},"accessType":{"type":"string"},"description":{"type":"string"},"editUrl":{"type":"string"},"viewUrl":{"type":"string"},"chatId":{"type":"integer","format":"int64"},"externalId":{"type":"string"}}}},"required":["catalogItemId","fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/vibecodeconnector.catalog.item.delete":{"post":{"description":"Deletes a catalog item owned by the current REST user","tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"catalogItemId":{"type":"integer","example":1}},"required":["catalogItemId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/batch":{"post":{"tags":[],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":[],"summary":"Метод Batch","description":"Метод позволяет реализовать вызов нескольких методов в рамках одного запроса"}},"\/documentation":{"post":{"summary":"Документация Open API","description":"Метод для получения документации продукта в Open API формате","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"summary":"Документация Open API","description":"Метод для получения документации продукта в Open API формате","tags":["rest"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/scopes":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"filterModule":{"type":"string","example":"string"},"filterController":{"type":"string","example":"string"},"filterMethod":{"type":"string","example":"string"}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}}},"components":{"schemas":{"bitrix.humanresources.nodedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"type":{"type":"string","title":"type"},"structureId":{"type":"integer","format":"int64","title":"structureId"},"parentId":{"type":"integer","format":"int64","title":"parentId"},"description":{"type":"string","title":"description"},"accessCode":{"type":"string","title":"accessCode"},"userCount":{"type":"integer","format":"int64","title":"userCount"},"colorName":{"type":"string","title":"colorName"},"xmlId":{"type":"string","title":"xmlId"},"createdAt":{"type":"string","title":"createdAt"},"updatedAt":{"type":"string","title":"updatedAt"},"members":{"type":"array","title":"members"}}},"bitrix.humanresources.employeedto":{"type":"object","properties":{"userId":{"type":"integer","format":"int64","title":"userId"},"name":{"type":"string","title":"name"},"workPosition":{"type":"string","title":"workPosition"},"avatar":{"type":"string","title":"avatar"},"url":{"type":"string","title":"url"},"departments":{"type":"array","title":"departments"},"teams":{"type":"array","title":"teams"}}},"bitrix.mail.mailboxdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"email":{"type":"string","title":"email"},"senderName":{"type":"string","title":"senderName"}}},"bitrix.mail.messagedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"mailboxId":{"type":"integer","format":"int64","title":"mailboxId"},"mailboxEmail":{"type":"string","title":"mailboxEmail"},"subject":{"type":"string","title":"subject"},"from":{"type":"string","title":"from"},"to":{"type":"string","title":"to"},"cc":{"type":"string","title":"cc"},"date":{"type":"string","title":"date"},"isSeen":{"type":"boolean","title":"isSeen"},"hasAttachments":{"type":"boolean","title":"hasAttachments"},"url":{"type":"string","title":"url"},"bindings":{"type":"array","title":"bindings"},"body":{"type":"string","title":"body"}}},"bitrix.mail.recipientdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"email":{"type":"string","title":"email"},"name":{"type":"string","title":"name"}}},"bitrix.main.eventlogdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"ID записи","description":"Уникальный идентификатор записи в журнале событий"},"timestampX":{"type":"string","format":"date-time","title":"Время события","description":"Дата и время когда произошло событие"},"severity":{"type":"string","title":"Уровень важности","description":"Уровень серьезности события (INFO, WARNING, ERROR, etc.)"},"auditTypeId":{"type":"string","title":"Тип события","description":"Идентификатор типа аудиторского события"},"moduleId":{"type":"string","title":"Модуль","description":"Модуль в котором произошло событие"},"itemId":{"type":"string","title":"ID элемента","description":"Идентификатор элемента связанного с событием"},"remoteAddr":{"type":"string","title":"IP адрес","description":"IP адрес пользователя вызвавшего событие"},"userAgent":{"type":"string","title":"User Agent","description":"Браузер и операционная система пользователя"},"requestUri":{"type":"string","title":"URI запроса","description":"URL по которому был выполнен запрос"},"siteId":{"type":"string","title":"ID сайта","description":"Идентификатор сайта на котором произошло событие"},"userId":{"type":"integer","format":"int64","title":"ID пользователя","description":"Идентификатор пользователя вызвавшего событие"},"guestId":{"type":"integer","format":"int64","title":"ID гостя","description":"Идентификатор гостя (неавторизованного пользователя)"},"description":{"type":"string","title":"Описание события","description":"Подробное описание произошедшего события"}}},"bitrix.note.searchresultitemdto":{"type":"object","properties":{"documentId":{"type":"integer","format":"int64","title":"documentId"},"collectionId":{"type":"integer","format":"int64","title":"collectionId"},"title":{"type":"string","title":"title"},"score":{"type":"float","title":"score"},"snippet":{"type":"string","title":"snippet"},"sharedAccess":{"type":"boolean","title":"sharedAccess"}}},"bitrix.note.documenttreeitemdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"collectionId":{"type":"integer","format":"int64","title":"collectionId"},"parentId":{"type":"integer","format":"int64","title":"parentId"},"title":{"type":"string","title":"title"},"position":{"type":"integer","format":"int64","title":"position"},"children":{"type":"array","title":"children"}}},"bitrix.note.collectionitemdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"position":{"type":"integer","format":"int64","title":"position"},"policyLevel":{"type":"string","title":"policyLevel"},"createdBy":{"type":"integer","format":"int64","title":"createdBy"},"createdAt":{"type":"string","title":"createdAt"},"updatedBy":{"type":"integer","format":"int64","title":"updatedBy"},"updatedAt":{"type":"string","title":"updatedAt"}}},"bitrix.note.documentitemdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"collectionId":{"type":"integer","format":"int64","title":"collectionId"},"parentId":{"type":"integer","format":"int64","title":"parentId"},"title":{"type":"string","title":"title"},"markdown":{"type":"string","title":"markdown"},"position":{"type":"integer","format":"int64","title":"position"},"createdBy":{"type":"integer","format":"int64","title":"createdBy"},"updatedBy":{"type":"integer","format":"int64","title":"updatedBy"},"createdAt":{"type":"string","title":"createdAt"},"updatedAt":{"type":"string","title":"updatedAt"}}},"bitrix.rest.enumdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"entityId":{"type":"string","title":"entityId"},"fieldId":{"type":"integer","format":"int64","title":"fieldId"},"value":{"type":"string","title":"value"},"isDefault":{"type":"boolean","title":"isDefault"},"sort":{"type":"integer","format":"int64","title":"sort"},"xmlId":{"type":"string","title":"xmlId"}}},"bitrix.rest.customdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"entityId":{"type":"string","title":"entityId"},"name":{"type":"string","title":"name"},"userTypeId":{"type":"string","title":"userTypeId"},"xmlId":{"type":"string","title":"xmlId"},"sort":{"type":"integer","format":"int64","title":"sort"},"isMultiple":{"type":"boolean","title":"isMultiple"},"isMandatory":{"type":"boolean","title":"isMandatory"},"showFilter":{"type":"string","title":"showFilter"},"showInList":{"type":"boolean","title":"showInList"},"editInList":{"type":"boolean","title":"editInList"},"isSearchable":{"type":"boolean","title":"isSearchable"},"settings":{"type":"array","title":"settings"},"editFormLabel":{"title":"editFormLabel"},"listColumnLabel":{"title":"listColumnLabel"},"listFilterLabel":{"title":"listFilterLabel"},"errorMessage":{"title":"errorMessage"},"helpMessage":{"title":"helpMessage"}}},"bitrix.rest.dtofielddto":{"type":"object","properties":{"name":{"type":"string","title":"name"},"type":{"type":"string","title":"type"},"title":{"type":"string","title":"title"},"description":{"type":"string","title":"description"},"validationRules":{"type":"array","title":"validationRules"},"requiredGroups":{"type":"array","title":"requiredGroups"},"filterable":{"type":"boolean","title":"filterable"},"sortable":{"type":"boolean","title":"sortable"},"editable":{"type":"boolean","title":"editable"},"multiple":{"type":"boolean","title":"multiple"},"elementType":{"type":"string","title":"elementType"}}},"bitrix.rest.accessdto":{"type":"object","properties":{"clientId":{"type":"string","title":"Application client ID"},"codes":{"type":"array","title":"Application access codes"},"codesDetails":{"type":"array","title":"Access code details with provider and display name"}}},"bitrix.rest.embeddingdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"ID"},"userId":{"type":"integer","format":"int64","title":"User ID"},"placement":{"type":"string","title":"Placement name"},"handler":{"type":"string","title":"Placement Handler URI"},"title":{"type":"string","title":"title"},"description":{"type":"string","title":"description"},"groupName":{"type":"string","title":"groupName"},"additional":{"type":"string","title":"additional"},"options":{"type":"array","title":"options"},"languages":{"title":"languages"}}},"bitrix.rest.appdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"Application inner identification"},"clientId":{"type":"string","title":"Application client ID"},"clientSecret":{"type":"string","title":"Application client secret"},"applicationToken":{"type":"string","title":"Application token (shared secret used to authenticate webhook callbacks from the portal)"},"scopes":{"type":"array","title":"Application scopes"},"title":{"type":"string","title":"Application title"},"url":{"type":"string","title":"Handler URL"},"urlInstall":{"type":"string","title":"Installation URL"},"urlSettings":{"type":"string","title":"Settings URL"},"mobile":{"type":"boolean","title":"Mobile application flag"},"version":{"type":"string","title":"Application version"},"active":{"type":"boolean","title":"Application active flag"},"installed":{"type":"boolean","title":"Application installed flag"},"dateCreate":{"type":"string","title":"Date of creation"},"dateInstall":{"type":"string","title":"Date of installation"},"attributes":{"type":"array","title":"Application external attributes"}}},"bitrix.rest.oauthtokendto":{"type":"object","properties":{"accessToken":{"type":"string","title":"OAuth access token"},"refreshToken":{"type":"string","title":"OAuth refresh token"},"expiresIn":{"type":"integer","format":"int64","title":"Access token lifetime in seconds"},"serverEndpoint":{"type":"string","title":"REST server endpoint"}}},"bitrix.rest.placementdto":{"type":"object","properties":{"placement":{"type":"string","title":"placement"}}},"bitrix.rest.incomingwebhookdto":{"type":"object","properties":{"url":{"type":"string","title":"Webhook handler URL"},"scopes":{"type":"array","title":"Webhook scopes"},"title":{"type":"string","title":"Webhook title"},"active":{"type":"boolean","title":"Active flag"},"userId":{"type":"integer","format":"int64","title":"Owner user id"},"dateCreate":{"type":"string","title":"Date of creation"},"attributes":{"type":"array","title":"Incoming webhook external attributes"}}},"bitrix.tasks.messagedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"taskId":{"type":"integer","format":"int64","title":"taskId"},"text":{"type":"string","title":"text"}}},"bitrix.tasks.resultdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"taskId":{"type":"integer","format":"int64","title":"taskId"},"text":{"type":"string","title":"text"},"authorId":{"type":"integer","format":"int64","title":"authorId"},"author":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"author"},"createdAt":{"type":"string","format":"date-time","title":"createdAt"},"updatedAt":{"type":"string","format":"date-time","title":"updatedAt"},"status":{"type":"string","title":"status"},"fileIds":{"type":"array","title":"fileIds"},"rights":{"type":"array","title":"rights"},"messageId":{"type":"integer","format":"int64","title":"messageId"}}},"bitrix.tasks.userdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"role":{"type":"string","title":"role"},"image":{"$ref":"#\/components\/schemas\/bitrix.tasks.filedto","title":"image"},"gender":{"type":"string","title":"gender"},"email":{"type":"string","title":"email"},"externalAuthId":{"type":"string","title":"externalAuthId"},"rights":{"type":"array","title":"rights"}}},"bitrix.tasks.filedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"src":{"type":"string","title":"src"},"name":{"type":"string","title":"name"},"width":{"type":"integer","format":"int64","title":"width"},"height":{"type":"integer","format":"int64","title":"height"},"size":{"type":"integer","format":"int64","title":"size"},"subDir":{"type":"string","title":"subDir"},"contentType":{"type":"string","title":"contentType"},"file":{"type":"array","title":"file"}}},"bitrix.tasks.taskdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"title":{"type":"string","title":"title"},"description":{"type":"string","title":"description"},"creatorId":{"type":"integer","format":"int64","title":"creatorId"},"creator":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"creator"},"created":{"type":"string","format":"date-time","title":"created"},"responsibleId":{"type":"integer","format":"int64","title":"responsibleId"},"responsible":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"responsible"},"deadline":{"type":"string","format":"date-time","title":"deadline"},"needsControl":{"type":"boolean","title":"needsControl"},"startPlan":{"type":"string","format":"date-time","title":"startPlan"},"endPlan":{"type":"string","format":"date-time","title":"endPlan"},"fileIds":{"type":"array","title":"fileIds"},"checklist":{"type":"array","title":"checklist"},"groupId":{"type":"integer","format":"int64","title":"groupId"},"group":{"$ref":"#\/components\/schemas\/bitrix.tasks.groupdto","title":"group"},"stageId":{"type":"integer","format":"int64","title":"stageId"},"stage":{"$ref":"#\/components\/schemas\/bitrix.tasks.stagedto","title":"stage"},"epicId":{"type":"integer","format":"int64","title":"epicId"},"storyPoints":{"type":"integer","format":"int64","title":"storyPoints"},"flowId":{"type":"integer","format":"int64","title":"flowId"},"flow":{"$ref":"#\/components\/schemas\/bitrix.tasks.flowdto","title":"flow"},"priority":{"type":"string","title":"priority"},"status":{"type":"string","title":"status"},"statusChanged":{"type":"string","format":"date-time","title":"statusChanged"},"accomplices":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto"},"title":"accomplices"},"auditors":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto"},"title":"auditors"},"parentId":{"type":"integer","format":"int64","title":"parentId"},"parent":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto","title":"parent"},"containsChecklist":{"type":"boolean","title":"containsChecklist"},"containsSubTasks":{"type":"boolean","title":"containsSubTasks"},"containsRelatedTasks":{"type":"boolean","title":"containsRelatedTasks"},"containsGanttLinks":{"type":"boolean","title":"containsGanttLinks"},"containsPlacements":{"type":"boolean","title":"containsPlacements"},"containsResults":{"type":"boolean","title":"containsResults"},"numberOfReminders":{"type":"integer","format":"int64","title":"numberOfReminders"},"chatId":{"type":"integer","format":"int64","title":"chatId"},"chat":{"$ref":"#\/components\/schemas\/bitrix.tasks.chatdto","title":"chat"},"plannedDuration":{"type":"integer","format":"int64","title":"plannedDuration"},"actualDuration":{"type":"integer","format":"int64","title":"actualDuration"},"durationType":{"type":"string","title":"durationType"},"started":{"type":"string","format":"date-time","title":"started"},"estimatedTime":{"type":"integer","format":"int64","title":"estimatedTime"},"replicate":{"type":"boolean","title":"replicate"},"changed":{"type":"string","format":"date-time","title":"changed"},"changedById":{"type":"integer","format":"int64","title":"changedById"},"changedBy":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"changedBy"},"statusChangedById":{"type":"integer","format":"int64","title":"statusChangedById"},"statusChangedBy":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"statusChangedBy"},"closedById":{"type":"integer","format":"int64","title":"closedById"},"closedBy":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"closedBy"},"closed":{"type":"string","format":"date-time","title":"closed"},"activity":{"type":"string","format":"date-time","title":"activity"},"guid":{"type":"string","title":"guid"},"xmlId":{"type":"string","title":"xmlId"},"exchangeId":{"type":"string","title":"exchangeId"},"exchangeModified":{"type":"string","title":"exchangeModified"},"outlookVersion":{"type":"integer","format":"int64","title":"outlookVersion"},"mark":{"type":"string","title":"mark"},"allowsChangeDeadline":{"type":"boolean","title":"allowsChangeDeadline"},"allowsTimeTracking":{"type":"boolean","title":"allowsTimeTracking"},"matchesWorkTime":{"type":"boolean","title":"matchesWorkTime"},"addInReport":{"type":"boolean","title":"addInReport"},"isMultitask":{"type":"boolean","title":"isMultitask"},"siteId":{"type":"string","title":"siteId"},"forkedByTemplateId":{"type":"integer","format":"int64","title":"forkedByTemplateId"},"forkedByTemplate":{"$ref":"#\/components\/schemas\/bitrix.tasks.templatedto","title":"forkedByTemplate"},"deadlineCount":{"type":"integer","format":"int64","title":"deadlineCount"},"declineReason":{"type":"string","title":"declineReason"},"forumTopicId":{"type":"integer","format":"int64","title":"forumTopicId"},"tags":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.tagdto"},"title":"tags"},"link":{"type":"string","title":"link"},"userFields":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.userfielddto"},"title":"userFields"},"rights":{"type":"array","title":"rights"},"archiveLink":{"type":"string","title":"archiveLink"},"crmItemIds":{"type":"array","title":"crmItemIds"},"crmItems":{"$ref":"#\/components\/schemas\/bitrix.tasks.crmitemdto","title":"crmItems"},"reminders":{"type":"array","title":"reminders"},"elapsedTime":{"$ref":"#\/components\/schemas\/bitrix.tasks.elapsedtimedto","title":"elapsedTime"},"requireResult":{"type":"boolean","title":"requireResult"},"matchesSubTasksTime":{"type":"boolean","title":"matchesSubTasksTime"},"autocompleteSubTasks":{"type":"boolean","title":"autocompleteSubTasks"},"allowsChangeDatePlan":{"type":"boolean","title":"allowsChangeDatePlan"},"emailId":{"type":"integer","format":"int64","title":"emailId"},"email":{"$ref":"#\/components\/schemas\/bitrix.tasks.emaildto","title":"email"},"maxDeadlineChangeDate":{"type":"string","format":"date-time","title":"maxDeadlineChangeDate"},"maxDeadlineChanges":{"type":"integer","format":"int64","title":"maxDeadlineChanges"},"requireDeadlineChangeReason":{"type":"boolean","title":"requireDeadlineChangeReason"},"inFavorite":{"type":"array","title":"inFavorite"},"inPin":{"type":"array","title":"inPin"},"inGroupPin":{"type":"array","title":"inGroupPin"},"inMute":{"type":"array","title":"inMute"},"source":{"$ref":"#\/components\/schemas\/bitrix.tasks.sourcedto","title":"source"},"dependsOn":{"type":"array","title":"dependsOn"},"scenarios":{"type":"array","title":"scenarios"}}},"bitrix.tasks.groupdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"image":{"$ref":"#\/components\/schemas\/bitrix.tasks.filedto","title":"image"},"type":{"type":"string","title":"type"},"isVisible":{"type":"boolean","title":"isVisible"}}},"bitrix.tasks.stagedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"title":{"type":"string","title":"title"},"color":{"type":"string","title":"color"}}},"bitrix.tasks.flowdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"}}},"bitrix.tasks.chatdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"entityId":{"type":"integer","format":"int64","title":"entityId"},"entityType":{"type":"string","title":"entityType"}}},"bitrix.tasks.templatedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"task":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto","title":"task"},"title":{"type":"string","title":"title"},"description":{"type":"string","title":"description"},"creator":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"creator"},"responsibleCollection":{"type":"array","title":"responsibleCollection"},"deadlineAfterTs":{"type":"integer","format":"int64","title":"deadlineAfterTs"},"startDatePlanTs":{"type":"integer","format":"int64","title":"startDatePlanTs"},"endDatePlanTs":{"type":"integer","format":"int64","title":"endDatePlanTs"},"replicate":{"type":"boolean","title":"replicate"},"fileIds":{"type":"array","title":"fileIds"},"checklist":{"type":"array","title":"checklist"},"group":{"$ref":"#\/components\/schemas\/bitrix.tasks.groupdto","title":"group"},"priority":{"type":"string","title":"priority"},"accomplices":{"type":"array","title":"accomplices"},"auditors":{"type":"array","title":"auditors"},"parent":{"$ref":"#\/components\/schemas\/bitrix.tasks.templatedto","title":"parent"},"replicateParams":{"$ref":"#\/components\/schemas\/bitrix.tasks.replicateparamsdto","title":"replicateParams"}}},"bitrix.tasks.replicateparamsdto":{"type":"object","properties":{"period":{"type":"string","title":"period"},"everyDay":{"type":"string","title":"everyDay"},"workdayOnly":{"type":"string","title":"workdayOnly"},"dailyMonthInterval":{"type":"string","title":"dailyMonthInterval"},"everyWeek":{"type":"string","title":"everyWeek"},"monthlyType":{"type":"string","title":"monthlyType"},"monthlyDayNum":{"type":"string","title":"monthlyDayNum"},"monthlyMonthNum1":{"type":"string","title":"monthlyMonthNum1"},"monthlyWeekDayNum":{"type":"string","title":"monthlyWeekDayNum"},"monthlyWeekDay":{"type":"string","title":"monthlyWeekDay"},"monthlyMonthNum2":{"type":"string","title":"monthlyMonthNum2"},"yearlyType":{"type":"string","title":"yearlyType"},"yearlyDayNum":{"type":"string","title":"yearlyDayNum"},"yearlyMonth1":{"type":"string","title":"yearlyMonth1"},"yearlyWeekDayNum":{"type":"string","title":"yearlyWeekDayNum"},"yearlyWeekDay":{"type":"string","title":"yearlyWeekDay"},"yearlyMonth2":{"type":"string","title":"yearlyMonth2"},"time":{"type":"string","title":"time"},"timezoneOffset":{"type":"string","title":"timezoneOffset"},"startDate":{"type":"string","title":"startDate"},"repeatTill":{"type":"string","title":"repeatTill"},"endDate":{"type":"string","title":"endDate"},"times":{"type":"string","title":"times"}}},"bitrix.tasks.tagdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"ownerId":{"type":"integer","format":"int64","title":"ownerId"},"owner":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"owner"},"groupId":{"type":"integer","format":"int64","title":"groupId"},"group":{"$ref":"#\/components\/schemas\/bitrix.tasks.groupdto","title":"group"},"taskId":{"type":"integer","format":"int64","title":"taskId"},"task":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto","title":"task"}}},"bitrix.tasks.userfielddto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"key":{"type":"string","title":"key"},"value":{"title":"value"}}},"bitrix.tasks.crmitemdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"type":{"type":"string","title":"type"},"title":{"type":"string","title":"title"}}},"bitrix.tasks.elapsedtimedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"userId":{"type":"integer","format":"int64","title":"userId"},"taskId":{"type":"integer","format":"int64","title":"taskId"},"minutes":{"type":"integer","format":"int64","title":"minutes"},"seconds":{"type":"integer","format":"int64","title":"seconds"},"source":{"type":"string","title":"source"},"text":{"type":"string","title":"text"},"createdAtTs":{"type":"integer","format":"int64","title":"createdAtTs"},"startTs":{"type":"integer","format":"int64","title":"startTs"},"stopTs":{"type":"integer","format":"int64","title":"stopTs"}}},"bitrix.tasks.emaildto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"taskId":{"type":"integer","format":"int64","title":"taskId"},"mailboxId":{"type":"integer","format":"int64","title":"mailboxId"},"title":{"type":"string","title":"title"},"body":{"type":"string","title":"body"},"from":{"type":"string","title":"from"},"dateTs":{"type":"integer","format":"int64","title":"dateTs"},"link":{"type":"string","title":"link"}}},"bitrix.tasks.sourcedto":{"type":"object","properties":{"type":{"type":"string","title":"type"},"data":{"type":"array","title":"data"}}},"bitrix.timeman.recorddto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"userId":{"type":"integer","format":"int64","title":"userId"},"startTime":{"type":"string","format":"date-time","title":"startTime"},"endTime":{"type":"string","format":"date-time","title":"endTime"},"duration":{"type":"integer","format":"int64","title":"duration"},"breakLength":{"type":"integer","format":"int64","title":"breakLength"},"state":{"$ref":"#\/components\/schemas\/bitrix.timeman.recordstatedto","title":"state"},"isApproved":{"type":"boolean","title":"isApproved"}}},"bitrix.timeman.recordstatedto":{"type":"object","properties":{"status":{"type":"string","title":"status"}}},"bitrix.vibecodeconnector.accessdto":{"type":"object","properties":{"catalogItemId":{"type":"integer","format":"int64","title":"Catalog item identifier"},"accessCodes":{"type":"array","title":"Catalog item access codes"}}},"bitrix.vibecodeconnector.catalogitemdto":{"type":"object","properties":{"catalogItemId":{"type":"integer","format":"int64","title":"Catalog item identifier"},"title":{"type":"string","title":"Title"},"type":{"type":"string","title":"Item type"},"accessType":{"type":"string","title":"Access type"},"description":{"type":"string","title":"Description"},"editUrl":{"type":"string","title":"Edit URL"},"viewUrl":{"type":"string","title":"View URL"},"chatId":{"type":"integer","format":"int64","title":"Chat identifier"},"externalId":{"type":"string","title":"External identifier"},"ownerId":{"type":"integer","format":"int64","title":"Owner user identifier"},"color":{"type":"string","title":"Color"},"createdAt":{"type":"string","title":"Date of creation (ISO-8601)"},"updatedAt":{"type":"string","title":"Date of last update (ISO-8601)"}}}}}}
\ No newline at end of file
+{"openapi":"3.0.0","info":{"title":"Bitrix24 REST V3 API","version":"1.0.0"},"servers":[],"tags":[{"name":"humanresources","description":"humanresources module methods"},{"name":"mail","description":"mail module methods"},{"name":"main","description":"main module methods"},{"name":"rest","description":"rest module methods"},{"name":"tasks","description":"tasks module methods"},{"name":"timeman","description":"timeman module methods"},{"name":"vibecodeconnector","description":"vibecodeconnector module methods"}],"paths":{"\/humanresources.employee.search":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["userId","name","workPosition","avatar","url","departments","teams"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.humanresources.employeedto"}}}}}}}}}},"\/humanresources.employee.subordinates":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["userId","name","workPosition","avatar","url","departments","teams"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.employee.count":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.employee.multidepartment":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.get":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","name","type","structureId","parentId","description","accessCode","userCount","colorName","xmlId","createdAt","updatedAt","members"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.humanresources.nodedto"}}}}}}}}}}},"\/humanresources.node.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","name","type","structureId","parentId","description","accessCode","userCount","colorName","xmlId","createdAt","updatedAt","members"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"name":{"type":"string","example":"ASC"},"createdAt":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.humanresources.nodedto"}}}}}}}}}},"\/humanresources.node.search":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","name","type","structureId","parentId","description","accessCode","userCount","colorName","xmlId","createdAt","updatedAt","members"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"name":{"type":"string","example":"ASC"},"createdAt":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.humanresources.nodedto"}}}}}}}}}},"\/humanresources.node.count":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.children":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","name","type","structureId","parentId","description","accessCode","userCount","colorName","xmlId","createdAt","updatedAt","members"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.humanresources.nodedto"}}}}}}}}}},"\/humanresources.node.add":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.edit":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.move":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.communication.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","name","type","structureId","parentId","description","accessCode","userCount","colorName","xmlId","createdAt","updatedAt","members"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.communication.edit":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.member.move":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.member.remove":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.member.add":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.node.member.set":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["humanresources"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.mailbox.get":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","name","email","senderName"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.mail.mailboxdto"}}}}}}}}}}},"\/mail.mailbox.list":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","name","email","senderName"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.mail.mailboxdto"}}}}}}}}}},"\/mail.mailbox.senders":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","name","email","senderName"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.mail.mailboxdto"}}}}}}}}}},"\/mail.message.get":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","mailboxId","mailboxEmail","subject","from","to","cc","date","isSeen","hasAttachments","url","bindings","body"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.mail.messagedto"}}}}}}}}}}},"\/mail.message.list":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","mailboxId","mailboxEmail","subject","from","to","cc","date","isSeen","hasAttachments","url","bindings","body"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.mail.messagedto"}}}}}}}}}},"\/mail.message.send":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.reply":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.forward":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.createcrmactivity":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/mail.message.removecrmactivity":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/mail.message.thread":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","mailboxId","mailboxEmail","subject","from","to","cc","date","isSeen","hasAttachments","url","bindings","body"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.movetofolder":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.createtask":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.createcalendarevent":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.createchat":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.message.createfeedpost":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"tags":["mail"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/mail.recipient.listcontacts":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","email","name"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.mail.recipientdto"}}}}}}}}}},"\/mail.recipient.listemployees":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","email","name"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.mail.recipientdto"}}}}}}}}}},"\/main.eventlog.list":{"post":{"summary":"Retrieve record list","description":"Retrieves a list of specified records.","tags":["main"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","timestampX","severity","auditTypeId","moduleId","itemId","remoteAddr","userAgent","requestUri","siteId","userId","guestId","description"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"timestampX":{"type":"string","example":"ASC"},"auditTypeId":{"type":"string","example":"ASC"},"userId":{"type":"string","example":"ASC"},"guestId":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.main.eventlogdto"}}}}}}}}}},"\/main.eventlog.get":{"post":{"summary":"Retrieve record","description":"Retrieves a record by the specified ID.","tags":["main"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","timestampX","severity","auditTypeId","moduleId","itemId","remoteAddr","userAgent","requestUri","siteId","userId","guestId","description"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.main.eventlogdto"}}}}}}}}}}},"\/main.eventlog.tail":{"post":{"summary":"Track records","description":"Retrieves the most recent records.","tags":["main"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","timestampX","severity","auditTypeId","moduleId","itemId","remoteAddr","userAgent","requestUri","siteId","userId","guestId","description"]},"filter":{"type":"array"},"cursor":{"type":"object","example":{"field":"id","value":0,"order":"ASC"}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.main.eventlogdto"}}}}}}}}}},"\/rest.scope.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"filterModule":{"type":"string","example":"string"},"filterController":{"type":"string","example":"string"},"filterMethod":{"type":"string","example":"string"}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/rest.documentation.openapi":{"post":{"summary":"Get Open API documentation","description":"Retrieves documentation in Open API format.","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"summary":"Get Open API documentation","description":"Retrieves documentation in Open API format.","tags":["rest"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/humanresources.employee.field.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/humanresources.employee.field.get":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/humanresources.node.field.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/humanresources.node.field.get":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/humanresources.node.communication.field.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/humanresources.node.communication.field.get":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/humanresources.node.member.field.list":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/humanresources.node.member.field.get":{"post":{"tags":["humanresources"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/mail.mailbox.field.list":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/mail.mailbox.field.get":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/mail.message.field.list":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/mail.message.field.get":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/mail.recipient.field.list":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/mail.recipient.field.get":{"post":{"tags":["mail"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/main.eventlog.field.list":{"post":{"tags":["main"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/main.eventlog.field.get":{"post":{"tags":["main"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.incomingwebhook.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.incomingwebhook.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.access.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.access.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.embedding.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.embedding.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.local.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.local.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.personal.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.personal.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.placement.field.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/rest.application.placement.field.get":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/tasks.task.field.list":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/tasks.task.field.get":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/tasks.task.chat.message.field.list":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/tasks.task.chat.message.field.get":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/tasks.task.result.field.list":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/tasks.task.result.field.get":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/timeman.record.field.list":{"post":{"tags":["timeman"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/timeman.record.field.get":{"post":{"tags":["timeman"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/vibecodeconnector.catalog.item.field.list":{"post":{"tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/vibecodeconnector.catalog.item.field.get":{"post":{"tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/vibecodeconnector.catalog.item.access.field.list":{"post":{"tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}},"\/vibecodeconnector.catalog.item.access.field.get":{"post":{"tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["name","type","title","description","validationRules","requiredGroups","filterable","sortable","editable","multiple","elementType"]}},"required":["name"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.dtofielddto"}}}}}}}}}}},"\/rest.application.getbyclientid":{"post":{"summary":"Gets an application by OAuth client ID","description":"Request example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["id","clientId","clientSecret","applicationToken","scopes","title","url","urlInstall","urlSettings","mobile","version","active","installed","dateCreate","dateInstall","attributes"]}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.appdto"}}}}}}}}}}},"\/rest.application.list":{"post":{"summary":"Lists the installed applications","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"attributes":{"type":"array"},"select":{"type":"array","items":{"type":"string"},"example":["id","clientId","clientSecret","applicationToken","scopes","title","url","urlInstall","urlSettings","mobile","version","active","installed","dateCreate","dateInstall","attributes"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"clientId":{"type":"string","example":"ASC"},"title":{"type":"string","example":"ASC"},"version":{"type":"string","example":"ASC"},"dateCreate":{"type":"string","example":"ASC"},"dateInstall":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}},"required":["attributes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.appdto"}}}}}}}}}},"\/rest.incomingwebhook.add":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string","example":"string"},"scopes":{"type":"array"},"attributes":{"type":"array"},"select":{"type":"array","items":{"type":"string"},"example":["url","scopes","title","active","userId","dateCreate","attributes"]}},"required":["title","scopes","attributes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.incomingwebhookdto"}}}}}}}}}}},"\/rest.incomingwebhook.update":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"fields":{"type":"object","properties":{"scopes":{"type":"array"},"title":{"type":"string"}}}},"required":["id","fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.incomingwebhook.delete":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.incomingwebhook.list":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["url","scopes","title","active","userId","dateCreate","attributes"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"dateCreate":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.incomingwebhookdto"}}}}}}}}}},"\/rest.application.access.set":{"post":{"summary":"Sets access codes for the application","description":"Replaces all existing access codes for the application with the provided ones.\n\t\tFor personal applications, the owner user access code is always added to the saved access codes.\n\t\tAccess codes define which users or groups can use the application.\n\t\tAdministrators and personal application owners always have access regardless of access codes.\n\t\tFor shared applications, if no access codes are set, the application is available to everyone.\n\t\tFor personal applications, if no access codes are set, only the owner and administrators have access.\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022,\n\t\t\t\u0022codes\u0022: [\u0022UA\u0022, \u0022D1\u0022]\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"codes":{"type":"array","items":{"type":"string"}}},"required":["clientId","codes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.access.delete":{"post":{"summary":"Deletes access codes for the application","description":"Removes specified access codes from the application.\n\t\tOnly the provided codes are removed; other existing codes remain unchanged.\n\t\tAdministrators and personal application owners always have access regardless of access codes.\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022,\n\t\t\t\u0022codes\u0022: [\u0022D1\u0022]\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"codes":{"type":"array","items":{"type":"string"}}},"required":["clientId","codes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.access.reset":{"post":{"summary":"Resets access for the application to defaults","description":"Removes all custom access codes and restores the default access settings for the application.\n\t\tFor personal applications, the default is the owner and administrators only.\n\t\tFor shared applications, the default is no restrictions (available to everyone).\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.access.get":{"post":{"summary":"Gets the access codes for the application","description":"Returns the current access codes assigned to the application,\n\t\tincluding detailed information about each code (provider and display name).\n\t\tAdministrators and personal application owners always have access regardless of access codes.\n\t\tFor shared applications, if no access codes are set, the application is available to everyone.\n\t\tFor personal applications, if no access codes are set, only the owner and administrators have access.\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["clientId","codes","codesDetails"]}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.accessdto"}}}}}}}}}}},"\/rest.application.embedding.list":{"post":{"summary":"Lists application embeddings","description":"Request example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"select":{"type":"array","items":{"type":"string"},"example":["id","userId","placement","handler","title","description","groupName","additional","options","languages"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object"},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.rest.embeddingdto"}}}}}}}}}},"\/rest.application.embedding.add":{"post":{"summary":"Adds a new embedding for the application","description":"Request example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022,\n\t\t\t\u0022placement\u0022: \u0022IM_CONTEXT_MENU\u0022,\n\t\t\t\u0022handler\u0022: \u0022https:\/\/example.com\/embed\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"placement":{"type":"string","example":"string"},"handler":{"type":"string","example":"string"},"userId":{"type":"integer","example":1},"title":{"type":"string","example":"string"},"description":{"type":"string","example":"string"},"groupName":{"type":"string","example":"string"},"settings":{"type":"array"},"languages":{"type":"array"}},"required":["clientId","placement","handler","userId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.embedding.delete":{"post":{"summary":"Deletes an embedding","description":"If `handler` is provided, only the embedding with that handler will be deleted.\n\t\tIf `userId` is provided, only the embedding for that user will be deleted.\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022,\n\t\t\t\u0022placement\u0022:\u0022IM_CONTEXT_MENU\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"placement":{"type":"string","example":"string"},"handler":{"type":"string","example":"string"},"userId":{"type":"integer","example":1}},"required":["clientId","placement"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/rest.application.local.install":{"post":{"summary":"Installs a local shared application","description":"Request example:\n\t\t{\n\t\t\t\u0022title\u0022: \u0022Test application\u0022,\n\t\t\t\u0022handlerUrl\u0022: \u0022https:\/\/example.com\u0022,\n\t\t\t\u0022scopes\u0022: [\u0022crm\u0022],\n\t\t\t\u0022mobile\u0022: false,\n\t\t\t\u0022menuTitles\u0022: {\n\t\t\t\t\u0022en\u0022: \u0022Test application\u0022\n\t\t\t}\n\t\t}\n\t\tIf `menuTitles` is omitted, the application is installed as API-only: \n\t\tit is not shown in the Bitrix24 interface, and its only way to access the portal is through the REST API, \n\t\tbut it can still add embeddings.","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string","example":"string"},"handlerUrl":{"type":"string","example":"string"},"scopes":{"type":"array"},"mobile":{"type":"boolean","example":true},"menuTitles":{"type":"array"},"clientId":{"type":"string","example":"string"},"applicationToken":{"type":"string","example":"string"},"attributes":{"type":"array"},"select":{"type":"array","items":{"type":"string"},"example":["id","clientId","clientSecret","applicationToken","scopes","title","url","urlInstall","urlSettings","mobile","version","active","installed","dateCreate","dateInstall","attributes"]}},"required":["title","handlerUrl","scopes","mobile","menuTitles","attributes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.appdto"}}}}}}}}}}},"\/rest.application.local.uninstall":{"post":{"summary":"Uninstalls the local shared application","description":"Request example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.personal.install":{"post":{"summary":"Installs a local personal application","description":"Request example:\n\t\t{\n\t\t\t\u0022title\u0022: \u0022Test application\u0022,\n\t\t\t\u0022handlerUrl\u0022: \u0022https:\/\/example.com\u0022,\n\t\t\t\u0022scopes\u0022: [\u0022crm\u0022],\n\t\t\t\u0022mobile\u0022: false,\n\t\t\t\u0022menuTitles\u0022: {\n\t\t\t\t\u0022en\u0022: \u0022Test application\u0022\n\t\t\t}\n\t\t}\n\t\tIf `menuTitles` is omitted, the application is installed as API-only: \n\t\tit is not shown in the Bitrix24 interface, and its only way to access the portal is through the REST API, \n\t\tbut it can still add embeddings.","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string","example":"string"},"handlerUrl":{"type":"string","example":"string"},"scopes":{"type":"array"},"mobile":{"type":"boolean","example":true},"menuTitles":{"type":"array"},"clientId":{"type":"string","example":"string"},"applicationToken":{"type":"string","example":"string"},"attributes":{"type":"array"},"select":{"type":"array","items":{"type":"string"},"example":["id","clientId","clientSecret","applicationToken","scopes","title","url","urlInstall","urlSettings","mobile","version","active","installed","dateCreate","dateInstall","attributes"]}},"required":["title","handlerUrl","scopes","mobile","menuTitles","attributes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.rest.appdto"}}}}}}}}}}},"\/rest.application.personal.uninstall":{"post":{"summary":"Uninstalls the local personal application","description":"Request example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"}},"required":["clientId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/rest.application.placement.list":{"post":{"summary":"Lists available placements","description":"If `scope` is provided, only placements for that scope are returned, and other parameters are ignored.\n\t\tIf `showAll` is `true`, all available placements are returned.\n\t\tIf `clientId` is provided, only placements available to that application are returned.\n\t\tIf no parameters are provided, all available placements are returned.\n\t\tRequest example:\n\t\t{\n\t\t\t\u0022clientId\u0022: \u0022local.69b9196bdbd793.03286491\u0022\n\t\t}","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"string"},"scope":{"type":"string","example":"string"},"showAll":{"type":"boolean","example":true}},"required":["showAll"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/rest.portal.license.get":{"post":{"summary":"Gets portal license information","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"summary":"Gets portal license information","tags":["rest"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/tasks.task.update":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"fields":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"responsibleId":{"type":"integer","format":"int64"},"deadline":{"type":"string","format":"date-time"},"needsControl":{"type":"boolean"},"startPlan":{"type":"string","format":"date-time"},"endPlan":{"type":"string","format":"date-time"},"fileIds":{"type":"array"},"checklist":{"type":"array"},"groupId":{"type":"integer","format":"int64"},"stageId":{"type":"integer","format":"int64"},"epicId":{"type":"integer","format":"int64"},"storyPoints":{"type":"integer","format":"int64"},"flowId":{"type":"integer","format":"int64"},"priority":{"type":"string"},"status":{"type":"string"},"statusChanged":{"type":"string","format":"date-time"},"parentId":{"type":"integer","format":"int64"},"containsChecklist":{"type":"boolean"},"containsSubTasks":{"type":"boolean"},"containsRelatedTasks":{"type":"boolean"},"containsGanttLinks":{"type":"boolean"},"containsPlacements":{"type":"boolean"},"containsResults":{"type":"boolean"},"numberOfReminders":{"type":"integer","format":"int64"},"chatId":{"type":"integer","format":"int64"},"plannedDuration":{"type":"integer","format":"int64"},"actualDuration":{"type":"integer","format":"int64"},"durationType":{"type":"string"},"started":{"type":"string","format":"date-time"},"estimatedTime":{"type":"integer","format":"int64"},"replicate":{"type":"boolean"},"changed":{"type":"string","format":"date-time"},"changedById":{"type":"integer","format":"int64"},"statusChangedById":{"type":"integer","format":"int64"},"closedById":{"type":"integer","format":"int64"},"closed":{"type":"string","format":"date-time"},"activity":{"type":"string","format":"date-time"},"guid":{"type":"string"},"xmlId":{"type":"string"},"exchangeId":{"type":"string"},"exchangeModified":{"type":"string"},"outlookVersion":{"type":"integer","format":"int64"},"mark":{"type":"string"},"allowsChangeDeadline":{"type":"boolean"},"allowsTimeTracking":{"type":"boolean"},"matchesWorkTime":{"type":"boolean"},"addInReport":{"type":"boolean"},"isMultitask":{"type":"boolean"},"siteId":{"type":"string"},"forkedByTemplateId":{"type":"integer","format":"int64"},"deadlineCount":{"type":"integer","format":"int64"},"declineReason":{"type":"string"},"forumTopicId":{"type":"integer","format":"int64"},"link":{"type":"string"},"rights":{"type":"array"},"archiveLink":{"type":"string"},"crmItemIds":{"type":"array"},"reminders":{"type":"array"},"requireResult":{"type":"boolean"},"matchesSubTasksTime":{"type":"boolean"},"autocompleteSubTasks":{"type":"boolean"},"allowsChangeDatePlan":{"type":"boolean"},"emailId":{"type":"integer","format":"int64"},"maxDeadlineChangeDate":{"type":"string","format":"date-time"},"maxDeadlineChanges":{"type":"integer","format":"int64"},"requireDeadlineChangeReason":{"type":"boolean"},"inFavorite":{"type":"array"},"inPin":{"type":"array"},"inGroupPin":{"type":"array"},"inMute":{"type":"array"},"dependsOn":{"type":"array"},"scenarios":{"type":"array"}}},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/tasks.task.delete":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/tasks.task.add":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"creatorId":{"type":"integer","format":"int64"},"responsibleId":{"type":"integer","format":"int64"},"deadline":{"type":"string","format":"date-time"},"needsControl":{"type":"boolean"},"startPlan":{"type":"string","format":"date-time"},"endPlan":{"type":"string","format":"date-time"},"fileIds":{"type":"array"},"checklist":{"type":"array"},"groupId":{"type":"integer","format":"int64"},"stageId":{"type":"integer","format":"int64"},"epicId":{"type":"integer","format":"int64"},"storyPoints":{"type":"integer","format":"int64"},"flowId":{"type":"integer","format":"int64"},"priority":{"type":"string"},"status":{"type":"string"},"statusChanged":{"type":"string","format":"date-time"},"parentId":{"type":"integer","format":"int64"},"containsChecklist":{"type":"boolean"},"containsSubTasks":{"type":"boolean"},"containsRelatedTasks":{"type":"boolean"},"containsGanttLinks":{"type":"boolean"},"containsPlacements":{"type":"boolean"},"containsResults":{"type":"boolean"},"numberOfReminders":{"type":"integer","format":"int64"},"chatId":{"type":"integer","format":"int64"},"plannedDuration":{"type":"integer","format":"int64"},"actualDuration":{"type":"integer","format":"int64"},"durationType":{"type":"string"},"started":{"type":"string","format":"date-time"},"estimatedTime":{"type":"integer","format":"int64"},"replicate":{"type":"boolean"},"changed":{"type":"string","format":"date-time"},"changedById":{"type":"integer","format":"int64"},"statusChangedById":{"type":"integer","format":"int64"},"closedById":{"type":"integer","format":"int64"},"closed":{"type":"string","format":"date-time"},"activity":{"type":"string","format":"date-time"},"guid":{"type":"string"},"xmlId":{"type":"string"},"exchangeId":{"type":"string"},"exchangeModified":{"type":"string"},"outlookVersion":{"type":"integer","format":"int64"},"mark":{"type":"string"},"allowsChangeDeadline":{"type":"boolean"},"allowsTimeTracking":{"type":"boolean"},"matchesWorkTime":{"type":"boolean"},"addInReport":{"type":"boolean"},"isMultitask":{"type":"boolean"},"siteId":{"type":"string"},"forkedByTemplateId":{"type":"integer","format":"int64"},"deadlineCount":{"type":"integer","format":"int64"},"declineReason":{"type":"string"},"forumTopicId":{"type":"integer","format":"int64"},"link":{"type":"string"},"rights":{"type":"array"},"archiveLink":{"type":"string"},"crmItemIds":{"type":"array"},"reminders":{"type":"array"},"requireResult":{"type":"boolean"},"matchesSubTasksTime":{"type":"boolean"},"autocompleteSubTasks":{"type":"boolean"},"allowsChangeDatePlan":{"type":"boolean"},"emailId":{"type":"integer","format":"int64"},"maxDeadlineChangeDate":{"type":"string","format":"date-time"},"maxDeadlineChanges":{"type":"integer","format":"int64"},"requireDeadlineChangeReason":{"type":"boolean"},"inFavorite":{"type":"array"},"inPin":{"type":"array"},"inGroupPin":{"type":"array"},"inMute":{"type":"array"},"dependsOn":{"type":"array"},"scenarios":{"type":"array"}},"required":["title","creatorId","responsibleId"]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto"}}}}}}}}}}},"\/tasks.task.get":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"select":{"type":"array","items":{"type":"string"},"example":["id","title","description","creatorId","created","responsibleId","deadline","needsControl","startPlan","endPlan","fileIds","checklist","groupId","stageId","epicId","storyPoints","flowId","priority","status","statusChanged","parentId","containsChecklist","containsSubTasks","containsRelatedTasks","containsGanttLinks","containsPlacements","containsResults","numberOfReminders","chatId","plannedDuration","actualDuration","durationType","started","estimatedTime","replicate","changed","changedById","statusChangedById","closedById","closed","activity","guid","xmlId","exchangeId","exchangeModified","outlookVersion","mark","allowsChangeDeadline","allowsTimeTracking","matchesWorkTime","addInReport","isMultitask","siteId","forkedByTemplateId","deadlineCount","declineReason","forumTopicId","link","rights","archiveLink","crmItemIds","crmItems","reminders","elapsedTime","requireResult","matchesSubTasksTime","autocompleteSubTasks","allowsChangeDatePlan","emailId","maxDeadlineChangeDate","maxDeadlineChanges","requireDeadlineChangeReason","inFavorite","inPin","inGroupPin","inMute","source","dependsOn","scenarios"]}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto"}}}}}}}}}}},"\/tasks.task.list":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"select":{"type":"array","items":{"type":"string"},"example":["id","title","description","creatorId","created","responsibleId","deadline","needsControl","startPlan","endPlan","fileIds","checklist","groupId","stageId","epicId","storyPoints","flowId","priority","status","statusChanged","parentId","containsChecklist","containsSubTasks","containsRelatedTasks","containsGanttLinks","containsPlacements","containsResults","numberOfReminders","chatId","plannedDuration","actualDuration","durationType","started","estimatedTime","replicate","changed","changedById","statusChangedById","closedById","closed","activity","guid","xmlId","exchangeId","exchangeModified","outlookVersion","mark","allowsChangeDeadline","allowsTimeTracking","matchesWorkTime","addInReport","isMultitask","siteId","forkedByTemplateId","deadlineCount","declineReason","forumTopicId","link","rights","archiveLink","crmItemIds","crmItems","reminders","elapsedTime","requireResult","matchesSubTasksTime","autocompleteSubTasks","allowsChangeDatePlan","emailId","maxDeadlineChangeDate","maxDeadlineChanges","requireDeadlineChangeReason","inFavorite","inPin","inGroupPin","inMute","source","dependsOn","scenarios"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"title":{"type":"string","example":"ASC"},"creatorId":{"type":"string","example":"ASC"},"created":{"type":"string","example":"ASC"},"responsibleId":{"type":"string","example":"ASC"},"deadline":{"type":"string","example":"ASC"},"startPlan":{"type":"string","example":"ASC"},"endPlan":{"type":"string","example":"ASC"},"groupId":{"type":"string","example":"ASC"},"priority":{"type":"string","example":"ASC"},"status":{"type":"string","example":"ASC"},"started":{"type":"string","example":"ASC"},"estimatedTime":{"type":"string","example":"ASC"},"changed":{"type":"string","example":"ASC"},"closed":{"type":"string","example":"ASC"},"activity":{"type":"string","example":"ASC"},"mark":{"type":"string","example":"ASC"},"allowsChangeDeadline":{"type":"string","example":"ASC"},"allowsTimeTracking":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto"}}}}}}}}}},"\/tasks.task.access.get":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1}},"required":["id"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/tasks.task.file.attach":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"taskId":{"type":"integer","example":1},"fileIds":{"type":"array","items":{"type":"integer"}}},"required":["taskId","fileIds"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/tasks.task.chat.message.send":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","properties":{"taskId":{"type":"integer","format":"int64"},"text":{"type":"string"}},"required":["taskId","text"]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/tasks.task.result.add":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","properties":{"taskId":{"type":"integer","format":"int64"},"text":{"type":"string"}},"required":["taskId","text"]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.tasks.resultdto"}}}}}}}}}}},"\/tasks.task.result.addfromchatmessage":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"fields":{"type":"object","properties":{"text":{"type":"string"},"messageId":{"type":"integer","format":"int64"}},"required":["messageId"]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.tasks.resultdto"}}}}}}}}}}},"\/tasks.task.result.update":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"fields":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]}},"required":["fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"item":{"$ref":"#\/components\/schemas\/bitrix.tasks.resultdto"}}}}}}}}}}},"\/tasks.task.result.delete":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","example":1},"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/tasks.task.result.list":{"post":{"tags":["tasks"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"select":{"type":"array","items":{"type":"string"},"example":["id","taskId","text","authorId","createdAt","updatedAt","status","fileIds","rights","messageId"]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"authorId":{"type":"string","example":"ASC"},"createdAt":{"type":"string","example":"ASC"},"updatedAt":{"type":"string","example":"ASC"},"status":{"type":"string","example":"ASC"},"messageId":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.resultdto"}}}}}}}}}},"\/timeman.record.list":{"post":{"tags":["timeman"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"filter":{"type":"array","example":[["id","\u003E=",1],["id",1],["id","in",[1,2,3]]]},"select":{"type":"array","items":{"type":"string"},"example":["id","userId","startTime","endTime","duration","breakLength","state","isApproved"]},"order":{"type":"object","properties":{"id":{"type":"string","example":"ASC"},"userId":{"type":"string","example":"ASC"},"startTime":{"type":"string","example":"ASC"},"endTime":{"type":"string","example":"ASC"},"duration":{"type":"string","example":"ASC"}}},"pagination":{"type":"object","properties":{"page":{"type":"integer","example":2},"limit":{"type":"integer","example":20},"offset":{"type":"integer","example":0}}}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.timeman.recorddto"}}}}}}}}}},"\/vibecodeconnector.catalog.item.add":{"post":{"description":"Creates a catalog item owned by the current REST user","tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string","example":"string"},"type":{"type":"string","example":"string"},"accessType":{"type":"string","example":"string"},"description":{"type":"string","example":"string"},"editUrl":{"type":"string","example":"string"},"viewUrl":{"type":"string","example":"string"},"chatId":{"type":"integer","example":1},"externalId":{"type":"string","example":"string"}},"required":["title","type","accessType"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"id":{"type":"integer","format":"int64"}}}}}}}}}}},"\/vibecodeconnector.catalog.item.update":{"post":{"description":"Updates editable fields of a catalog item owned by the current REST user","tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"catalogItemId":{"type":"integer","example":1},"fields":{"type":"object","properties":{"title":{"type":"string"},"accessType":{"type":"string"},"description":{"type":"string"},"editUrl":{"type":"string"},"viewUrl":{"type":"string"},"chatId":{"type":"integer","format":"int64"},"externalId":{"type":"string"}}}},"required":["catalogItemId","fields"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/vibecodeconnector.catalog.item.delete":{"post":{"description":"Deletes a catalog item owned by the current REST user","tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"catalogItemId":{"type":"integer","example":1}},"required":["catalogItemId"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/vibecodeconnector.catalog.item.access.set":{"post":{"description":"Replaces all ACL access codes for a catalog item owned by the current REST user","tags":["vibecodeconnector"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"catalogItemId":{"type":"integer","example":1},"accessCodes":{"type":"array"}},"required":["catalogItemId","accessCodes"]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object","properties":{"result":{"type":"boolean"}}}}}}}}}}},"\/batch":{"post":{"tags":[],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":[],"summary":"Batch request","description":"Executes a batch call of multiple methods inside a single request."}},"\/documentation":{"post":{"summary":"Get Open API documentation","description":"Retrieves documentation in Open API format.","tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":[]}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}},"get":{"summary":"Get Open API documentation","description":"Retrieves documentation in Open API format.","tags":["rest"],"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}},"\/scopes":{"post":{"tags":["rest"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"filterModule":{"type":"string","example":"string"},"filterController":{"type":"string","example":"string"},"filterMethod":{"type":"string","example":"string"}}}}}},"responses":{"200":{"description":"Success response","content":{"application\/json":{"schema":{"type":"object","properties":{"result":{"type":"object"}}}}}}}}}},"components":{"schemas":{"bitrix.humanresources.employeedto":{"type":"object","properties":{"userId":{"type":"integer","format":"int64","title":"userId"},"name":{"type":"string","title":"name"},"workPosition":{"type":"string","title":"workPosition"},"avatar":{"type":"string","title":"avatar"},"url":{"type":"string","title":"url"},"departments":{"type":"array","title":"departments"},"teams":{"type":"array","title":"teams"}}},"bitrix.humanresources.nodedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"type":{"type":"string","title":"type"},"structureId":{"type":"integer","format":"int64","title":"structureId"},"parentId":{"type":"integer","format":"int64","title":"parentId"},"description":{"type":"string","title":"description"},"accessCode":{"type":"string","title":"accessCode"},"userCount":{"type":"integer","format":"int64","title":"userCount"},"colorName":{"type":"string","title":"colorName"},"xmlId":{"type":"string","title":"xmlId"},"createdAt":{"type":"string","title":"createdAt"},"updatedAt":{"type":"string","title":"updatedAt"},"members":{"type":"array","title":"members"}}},"bitrix.mail.mailboxdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"email":{"type":"string","title":"email"},"senderName":{"type":"string","title":"senderName"}}},"bitrix.mail.messagedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"mailboxId":{"type":"integer","format":"int64","title":"mailboxId"},"mailboxEmail":{"type":"string","title":"mailboxEmail"},"subject":{"type":"string","title":"subject"},"from":{"type":"string","title":"from"},"to":{"type":"string","title":"to"},"cc":{"type":"string","title":"cc"},"date":{"type":"string","title":"date"},"isSeen":{"type":"boolean","title":"isSeen"},"hasAttachments":{"type":"boolean","title":"hasAttachments"},"url":{"type":"string","title":"url"},"bindings":{"type":"array","title":"bindings"},"body":{"type":"string","title":"body"}}},"bitrix.mail.recipientdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"email":{"type":"string","title":"email"},"name":{"type":"string","title":"name"}}},"bitrix.main.eventlogdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"Record ID","description":"Unique event log entry ID."},"timestampX":{"type":"string","format":"date-time","title":"Event time","description":"Event date and time."},"severity":{"type":"string","title":"Severity","description":"Event severity level (INFO, WARNING, ERROR, etc.)"},"auditTypeId":{"type":"string","title":"Event type","description":"Audit event type ID."},"moduleId":{"type":"string","title":"Module","description":"The module that produced the event."},"itemId":{"type":"string","title":"Item ID","description":"The ID of an item associated with the event."},"remoteAddr":{"type":"string","title":"IP address","description":"The IP address of a user associated with the event."},"userAgent":{"type":"string","title":"User Agent","description":"The User Agent string: the user\u0027s browser and OS."},"requestUri":{"type":"string","title":"Request URL","description":"The URL that was used to initiate the request."},"siteId":{"type":"string","title":"Site ID","description":"The ID of a site associated with the event."},"userId":{"type":"integer","format":"int64","title":"User ID","description":"The ID of a user associated with the event."},"guestId":{"type":"integer","format":"int64","title":"Guest ID","description":"The ID of a guest (i.e. a user who didn\u0027t log in)."},"description":{"type":"string","title":"Event description","description":"Detailed event description."}}},"bitrix.rest.dtofielddto":{"type":"object","properties":{"name":{"type":"string","title":"name"},"type":{"type":"string","title":"type"},"title":{"type":"string","title":"title"},"description":{"type":"string","title":"description"},"validationRules":{"type":"array","title":"validationRules"},"requiredGroups":{"type":"array","title":"requiredGroups"},"filterable":{"type":"boolean","title":"filterable"},"sortable":{"type":"boolean","title":"sortable"},"editable":{"type":"boolean","title":"editable"},"multiple":{"type":"boolean","title":"multiple"},"elementType":{"type":"string","title":"elementType"}}},"bitrix.rest.customdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"entityId":{"type":"string","title":"entityId"},"name":{"type":"string","title":"name"},"userTypeId":{"type":"string","title":"userTypeId"},"xmlId":{"type":"string","title":"xmlId"},"sort":{"type":"integer","format":"int64","title":"sort"},"isMultiple":{"type":"boolean","title":"isMultiple"},"isMandatory":{"type":"boolean","title":"isMandatory"},"showFilter":{"type":"string","title":"showFilter"},"showInList":{"type":"boolean","title":"showInList"},"editInList":{"type":"boolean","title":"editInList"},"isSearchable":{"type":"boolean","title":"isSearchable"},"settings":{"type":"array","title":"settings"},"editFormLabel":{"title":"editFormLabel"},"listColumnLabel":{"title":"listColumnLabel"},"listFilterLabel":{"title":"listFilterLabel"},"errorMessage":{"title":"errorMessage"},"helpMessage":{"title":"helpMessage"}}},"bitrix.rest.enumdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"entityId":{"type":"string","title":"entityId"},"fieldId":{"type":"integer","format":"int64","title":"fieldId"},"value":{"type":"string","title":"value"},"isDefault":{"type":"boolean","title":"isDefault"},"sort":{"type":"integer","format":"int64","title":"sort"},"xmlId":{"type":"string","title":"xmlId"}}},"bitrix.rest.appdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"Application inner identification"},"clientId":{"type":"string","title":"Application client ID"},"clientSecret":{"type":"string","title":"Application client secret"},"applicationToken":{"type":"string","title":"Application token (shared secret used to authenticate webhook callbacks from the portal)"},"scopes":{"type":"array","title":"Application scopes"},"title":{"type":"string","title":"Application title"},"url":{"type":"string","title":"Handler URL"},"urlInstall":{"type":"string","title":"Installation URL"},"urlSettings":{"type":"string","title":"Settings URL"},"mobile":{"type":"boolean","title":"Mobile application flag"},"version":{"type":"string","title":"Application version"},"active":{"type":"boolean","title":"Application active flag"},"installed":{"type":"boolean","title":"Application installed flag"},"dateCreate":{"type":"string","title":"Date of creation"},"dateInstall":{"type":"string","title":"Date of installation"},"attributes":{"type":"array","title":"Application external attributes"}}},"bitrix.rest.incomingwebhookdto":{"type":"object","properties":{"url":{"type":"string","title":"Webhook handler URL"},"scopes":{"type":"array","title":"Webhook scopes"},"title":{"type":"string","title":"Webhook title"},"active":{"type":"boolean","title":"Active flag"},"userId":{"type":"integer","format":"int64","title":"Owner user id"},"dateCreate":{"type":"string","title":"Date of creation"},"attributes":{"type":"array","title":"Incoming webhook external attributes"}}},"bitrix.rest.accessdto":{"type":"object","properties":{"clientId":{"type":"string","title":"Application client ID"},"codes":{"type":"array","title":"Application access codes"},"codesDetails":{"type":"array","title":"Access code details with provider and display name"}}},"bitrix.rest.embeddingdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"ID"},"userId":{"type":"integer","format":"int64","title":"User ID"},"placement":{"type":"string","title":"Placement name"},"handler":{"type":"string","title":"Placement Handler URI"},"title":{"type":"string","title":"title"},"description":{"type":"string","title":"description"},"groupName":{"type":"string","title":"groupName"},"additional":{"type":"string","title":"additional"},"options":{"type":"array","title":"options"},"languages":{"title":"languages"}}},"bitrix.rest.placementdto":{"type":"object","properties":{"placement":{"type":"string","title":"placement"}}},"bitrix.tasks.taskdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"title":{"type":"string","title":"title"},"description":{"type":"string","title":"description"},"creatorId":{"type":"integer","format":"int64","title":"creatorId"},"creator":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"creator"},"created":{"type":"string","format":"date-time","title":"created"},"responsibleId":{"type":"integer","format":"int64","title":"responsibleId"},"responsible":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"responsible"},"deadline":{"type":"string","format":"date-time","title":"deadline"},"needsControl":{"type":"boolean","title":"needsControl"},"startPlan":{"type":"string","format":"date-time","title":"startPlan"},"endPlan":{"type":"string","format":"date-time","title":"endPlan"},"fileIds":{"type":"array","title":"fileIds"},"checklist":{"type":"array","title":"checklist"},"groupId":{"type":"integer","format":"int64","title":"groupId"},"group":{"$ref":"#\/components\/schemas\/bitrix.tasks.groupdto","title":"group"},"stageId":{"type":"integer","format":"int64","title":"stageId"},"stage":{"$ref":"#\/components\/schemas\/bitrix.tasks.stagedto","title":"stage"},"epicId":{"type":"integer","format":"int64","title":"epicId"},"storyPoints":{"type":"integer","format":"int64","title":"storyPoints"},"flowId":{"type":"integer","format":"int64","title":"flowId"},"flow":{"$ref":"#\/components\/schemas\/bitrix.tasks.flowdto","title":"flow"},"priority":{"type":"string","title":"priority"},"status":{"type":"string","title":"status"},"statusChanged":{"type":"string","format":"date-time","title":"statusChanged"},"accomplices":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto"},"title":"accomplices"},"auditors":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto"},"title":"auditors"},"parentId":{"type":"integer","format":"int64","title":"parentId"},"parent":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto","title":"parent"},"containsChecklist":{"type":"boolean","title":"containsChecklist"},"containsSubTasks":{"type":"boolean","title":"containsSubTasks"},"containsRelatedTasks":{"type":"boolean","title":"containsRelatedTasks"},"containsGanttLinks":{"type":"boolean","title":"containsGanttLinks"},"containsPlacements":{"type":"boolean","title":"containsPlacements"},"containsResults":{"type":"boolean","title":"containsResults"},"numberOfReminders":{"type":"integer","format":"int64","title":"numberOfReminders"},"chatId":{"type":"integer","format":"int64","title":"chatId"},"chat":{"$ref":"#\/components\/schemas\/bitrix.tasks.chatdto","title":"chat"},"plannedDuration":{"type":"integer","format":"int64","title":"plannedDuration"},"actualDuration":{"type":"integer","format":"int64","title":"actualDuration"},"durationType":{"type":"string","title":"durationType"},"started":{"type":"string","format":"date-time","title":"started"},"estimatedTime":{"type":"integer","format":"int64","title":"estimatedTime"},"replicate":{"type":"boolean","title":"replicate"},"changed":{"type":"string","format":"date-time","title":"changed"},"changedById":{"type":"integer","format":"int64","title":"changedById"},"changedBy":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"changedBy"},"statusChangedById":{"type":"integer","format":"int64","title":"statusChangedById"},"statusChangedBy":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"statusChangedBy"},"closedById":{"type":"integer","format":"int64","title":"closedById"},"closedBy":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"closedBy"},"closed":{"type":"string","format":"date-time","title":"closed"},"activity":{"type":"string","format":"date-time","title":"activity"},"guid":{"type":"string","title":"guid"},"xmlId":{"type":"string","title":"xmlId"},"exchangeId":{"type":"string","title":"exchangeId"},"exchangeModified":{"type":"string","title":"exchangeModified"},"outlookVersion":{"type":"integer","format":"int64","title":"outlookVersion"},"mark":{"type":"string","title":"mark"},"allowsChangeDeadline":{"type":"boolean","title":"allowsChangeDeadline"},"allowsTimeTracking":{"type":"boolean","title":"allowsTimeTracking"},"matchesWorkTime":{"type":"boolean","title":"matchesWorkTime"},"addInReport":{"type":"boolean","title":"addInReport"},"isMultitask":{"type":"boolean","title":"isMultitask"},"siteId":{"type":"string","title":"siteId"},"forkedByTemplateId":{"type":"integer","format":"int64","title":"forkedByTemplateId"},"forkedByTemplate":{"$ref":"#\/components\/schemas\/bitrix.tasks.templatedto","title":"forkedByTemplate"},"deadlineCount":{"type":"integer","format":"int64","title":"deadlineCount"},"declineReason":{"type":"string","title":"declineReason"},"forumTopicId":{"type":"integer","format":"int64","title":"forumTopicId"},"tags":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.tagdto"},"title":"tags"},"link":{"type":"string","title":"link"},"userFields":{"type":"array","items":{"$ref":"#\/components\/schemas\/bitrix.tasks.userfielddto"},"title":"userFields"},"rights":{"type":"array","title":"rights"},"archiveLink":{"type":"string","title":"archiveLink"},"crmItemIds":{"type":"array","title":"crmItemIds"},"crmItems":{"$ref":"#\/components\/schemas\/bitrix.tasks.crmitemdto","title":"crmItems"},"reminders":{"type":"array","title":"reminders"},"elapsedTime":{"$ref":"#\/components\/schemas\/bitrix.tasks.elapsedtimedto","title":"elapsedTime"},"requireResult":{"type":"boolean","title":"requireResult"},"matchesSubTasksTime":{"type":"boolean","title":"matchesSubTasksTime"},"autocompleteSubTasks":{"type":"boolean","title":"autocompleteSubTasks"},"allowsChangeDatePlan":{"type":"boolean","title":"allowsChangeDatePlan"},"emailId":{"type":"integer","format":"int64","title":"emailId"},"email":{"$ref":"#\/components\/schemas\/bitrix.tasks.emaildto","title":"email"},"maxDeadlineChangeDate":{"type":"string","format":"date-time","title":"maxDeadlineChangeDate"},"maxDeadlineChanges":{"type":"integer","format":"int64","title":"maxDeadlineChanges"},"requireDeadlineChangeReason":{"type":"boolean","title":"requireDeadlineChangeReason"},"inFavorite":{"type":"array","title":"inFavorite"},"inPin":{"type":"array","title":"inPin"},"inGroupPin":{"type":"array","title":"inGroupPin"},"inMute":{"type":"array","title":"inMute"},"source":{"$ref":"#\/components\/schemas\/bitrix.tasks.sourcedto","title":"source"},"dependsOn":{"type":"array","title":"dependsOn"},"scenarios":{"type":"array","title":"scenarios"}}},"bitrix.tasks.userdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"role":{"type":"string","title":"role"},"image":{"$ref":"#\/components\/schemas\/bitrix.tasks.filedto","title":"image"},"gender":{"type":"string","title":"gender"},"email":{"type":"string","title":"email"},"externalAuthId":{"type":"string","title":"externalAuthId"},"rights":{"type":"array","title":"rights"}}},"bitrix.tasks.filedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"src":{"type":"string","title":"src"},"name":{"type":"string","title":"name"},"width":{"type":"integer","format":"int64","title":"width"},"height":{"type":"integer","format":"int64","title":"height"},"size":{"type":"integer","format":"int64","title":"size"},"subDir":{"type":"string","title":"subDir"},"contentType":{"type":"string","title":"contentType"},"file":{"type":"array","title":"file"}}},"bitrix.tasks.groupdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"image":{"$ref":"#\/components\/schemas\/bitrix.tasks.filedto","title":"image"},"type":{"type":"string","title":"type"},"isVisible":{"type":"boolean","title":"isVisible"}}},"bitrix.tasks.stagedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"title":{"type":"string","title":"title"},"color":{"type":"string","title":"color"}}},"bitrix.tasks.flowdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"}}},"bitrix.tasks.chatdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"entityId":{"type":"integer","format":"int64","title":"entityId"},"entityType":{"type":"string","title":"entityType"}}},"bitrix.tasks.templatedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"task":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto","title":"task"},"title":{"type":"string","title":"title"},"description":{"type":"string","title":"description"},"creator":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"creator"},"responsibleCollection":{"type":"array","title":"responsibleCollection"},"deadlineAfterTs":{"type":"integer","format":"int64","title":"deadlineAfterTs"},"startDatePlanTs":{"type":"integer","format":"int64","title":"startDatePlanTs"},"endDatePlanTs":{"type":"integer","format":"int64","title":"endDatePlanTs"},"replicate":{"type":"boolean","title":"replicate"},"fileIds":{"type":"array","title":"fileIds"},"checklist":{"type":"array","title":"checklist"},"group":{"$ref":"#\/components\/schemas\/bitrix.tasks.groupdto","title":"group"},"priority":{"type":"string","title":"priority"},"accomplices":{"type":"array","title":"accomplices"},"auditors":{"type":"array","title":"auditors"},"parent":{"$ref":"#\/components\/schemas\/bitrix.tasks.templatedto","title":"parent"},"replicateParams":{"$ref":"#\/components\/schemas\/bitrix.tasks.replicateparamsdto","title":"replicateParams"}}},"bitrix.tasks.replicateparamsdto":{"type":"object","properties":{"period":{"type":"string","title":"period"},"everyDay":{"type":"string","title":"everyDay"},"workdayOnly":{"type":"string","title":"workdayOnly"},"dailyMonthInterval":{"type":"string","title":"dailyMonthInterval"},"everyWeek":{"type":"string","title":"everyWeek"},"monthlyType":{"type":"string","title":"monthlyType"},"monthlyDayNum":{"type":"string","title":"monthlyDayNum"},"monthlyMonthNum1":{"type":"string","title":"monthlyMonthNum1"},"monthlyWeekDayNum":{"type":"string","title":"monthlyWeekDayNum"},"monthlyWeekDay":{"type":"string","title":"monthlyWeekDay"},"monthlyMonthNum2":{"type":"string","title":"monthlyMonthNum2"},"yearlyType":{"type":"string","title":"yearlyType"},"yearlyDayNum":{"type":"string","title":"yearlyDayNum"},"yearlyMonth1":{"type":"string","title":"yearlyMonth1"},"yearlyWeekDayNum":{"type":"string","title":"yearlyWeekDayNum"},"yearlyWeekDay":{"type":"string","title":"yearlyWeekDay"},"yearlyMonth2":{"type":"string","title":"yearlyMonth2"},"time":{"type":"string","title":"time"},"timezoneOffset":{"type":"string","title":"timezoneOffset"},"startDate":{"type":"string","title":"startDate"},"repeatTill":{"type":"string","title":"repeatTill"},"endDate":{"type":"string","title":"endDate"},"times":{"type":"string","title":"times"}}},"bitrix.tasks.tagdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"name":{"type":"string","title":"name"},"ownerId":{"type":"integer","format":"int64","title":"ownerId"},"owner":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"owner"},"groupId":{"type":"integer","format":"int64","title":"groupId"},"group":{"$ref":"#\/components\/schemas\/bitrix.tasks.groupdto","title":"group"},"taskId":{"type":"integer","format":"int64","title":"taskId"},"task":{"$ref":"#\/components\/schemas\/bitrix.tasks.taskdto","title":"task"}}},"bitrix.tasks.userfielddto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"key":{"type":"string","title":"key"},"value":{"title":"value"}}},"bitrix.tasks.crmitemdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"type":{"type":"string","title":"type"},"title":{"type":"string","title":"title"}}},"bitrix.tasks.elapsedtimedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"userId":{"type":"integer","format":"int64","title":"userId"},"taskId":{"type":"integer","format":"int64","title":"taskId"},"minutes":{"type":"integer","format":"int64","title":"minutes"},"seconds":{"type":"integer","format":"int64","title":"seconds"},"source":{"type":"string","title":"source"},"text":{"type":"string","title":"text"},"createdAtTs":{"type":"integer","format":"int64","title":"createdAtTs"},"startTs":{"type":"integer","format":"int64","title":"startTs"},"stopTs":{"type":"integer","format":"int64","title":"stopTs"}}},"bitrix.tasks.emaildto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"taskId":{"type":"integer","format":"int64","title":"taskId"},"mailboxId":{"type":"integer","format":"int64","title":"mailboxId"},"title":{"type":"string","title":"title"},"body":{"type":"string","title":"body"},"from":{"type":"string","title":"from"},"dateTs":{"type":"integer","format":"int64","title":"dateTs"},"link":{"type":"string","title":"link"}}},"bitrix.tasks.sourcedto":{"type":"object","properties":{"type":{"type":"string","title":"type"},"data":{"type":"array","title":"data"}}},"bitrix.tasks.messagedto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"taskId":{"type":"integer","format":"int64","title":"taskId"},"text":{"type":"string","title":"text"}}},"bitrix.tasks.resultdto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"taskId":{"type":"integer","format":"int64","title":"taskId"},"text":{"type":"string","title":"text"},"authorId":{"type":"integer","format":"int64","title":"authorId"},"author":{"$ref":"#\/components\/schemas\/bitrix.tasks.userdto","title":"author"},"createdAt":{"type":"string","format":"date-time","title":"createdAt"},"updatedAt":{"type":"string","format":"date-time","title":"updatedAt"},"status":{"type":"string","title":"status"},"fileIds":{"type":"array","title":"fileIds"},"rights":{"type":"array","title":"rights"},"messageId":{"type":"integer","format":"int64","title":"messageId"}}},"bitrix.timeman.recorddto":{"type":"object","properties":{"id":{"type":"integer","format":"int64","title":"id"},"userId":{"type":"integer","format":"int64","title":"userId"},"startTime":{"type":"string","format":"date-time","title":"startTime"},"endTime":{"type":"string","format":"date-time","title":"endTime"},"duration":{"type":"integer","format":"int64","title":"duration"},"breakLength":{"type":"integer","format":"int64","title":"breakLength"},"state":{"$ref":"#\/components\/schemas\/bitrix.timeman.recordstatedto","title":"state"},"isApproved":{"type":"boolean","title":"isApproved"}}},"bitrix.timeman.recordstatedto":{"type":"object","properties":{"status":{"type":"string","title":"status"}}},"bitrix.vibecodeconnector.catalogitemdto":{"type":"object","properties":{"catalogItemId":{"type":"integer","format":"int64","title":"Catalog item identifier"},"title":{"type":"string","title":"Title"},"type":{"type":"string","title":"Item type"},"accessType":{"type":"string","title":"Access type"},"description":{"type":"string","title":"Description"},"editUrl":{"type":"string","title":"Edit URL"},"viewUrl":{"type":"string","title":"View URL"},"chatId":{"type":"integer","format":"int64","title":"Chat identifier"},"externalId":{"type":"string","title":"External identifier"},"ownerId":{"type":"integer","format":"int64","title":"Owner user identifier"},"color":{"type":"string","title":"Color"},"createdAt":{"type":"string","title":"Date of creation (ISO-8601)"},"updatedAt":{"type":"string","title":"Date of last update (ISO-8601)"}}},"bitrix.vibecodeconnector.accessdto":{"type":"object","properties":{"catalogItemId":{"type":"integer","format":"int64","title":"Catalog item identifier"},"accessCodes":{"type":"array","title":"Catalog item access codes"}}}}}}
\ No newline at end of file
diff --git a/phpstan.neon.dist b/phpstan.neon.dist
index 36a9a3f3..6cd62f8e 100644
--- a/phpstan.neon.dist
+++ b/phpstan.neon.dist
@@ -34,6 +34,7 @@ parameters:
- tests/Integration/Services/Landing
- tests/Integration/Services/Disk
- tests/Integration/Services/Calendar
+ - tests/Integration/Services/Booking
- tests/Integration/Services/Lists
- tests/Integration/Services/CRM/Documentgenerator/Numerator
- tests/Integration/Services/CRM/Documentgenerator/Document
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index d431bba8..8110722b 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -332,6 +332,9 @@
./tests/Integration/Services/SonetGroup/
+
+ ./tests/Integration/Services/Booking/
+
./tests/Integration/Services/Main/Service/EventLogTest.php
./tests/Integration/Services/Main/EventLogField/Service/EventLogFieldTest.php
diff --git a/rector.php b/rector.php
index fab5a568..251fe734 100644
--- a/rector.php
+++ b/rector.php
@@ -72,6 +72,8 @@
__DIR__ . '/tests/Integration/Services/Disk',
__DIR__ . '/src/Services/Calendar',
__DIR__ . '/tests/Integration/Services/Calendar',
+ __DIR__ . '/src/Services/Booking',
+ __DIR__ . '/tests/Integration/Services/Booking',
__DIR__ . '/src/Services/Lists',
__DIR__ . '/tests/Integration/Services/Lists',
__DIR__ . '/src/Services/CRM/Documentgenerator/Numerator',
diff --git a/src/Core/EndpointUrlFormatter.php b/src/Core/EndpointUrlFormatter.php
index c4e7967a..d8cf80e9 100644
--- a/src/Core/EndpointUrlFormatter.php
+++ b/src/Core/EndpointUrlFormatter.php
@@ -73,6 +73,17 @@ public function format(
'tasks.flow.Flow.isExists',
'tasks.flow.Flow.activate',
'tasks.flow.Flow.pin',
+ 'booking.v1.resourceType.add',
+ 'booking.v1.resourceType.update',
+ 'booking.v1.resourceType.get',
+ 'booking.v1.resourceType.list',
+ 'booking.v1.resourceType.delete',
+ 'booking.v1.waitlist.externalData.list',
+ 'booking.v1.waitlist.externalData.set',
+ 'booking.v1.waitlist.externalData.unset',
+ 'booking.v1.booking.externalData.list',
+ 'booking.v1.booking.externalData.set',
+ 'booking.v1.booking.externalData.unset',
];
if (!in_array($apiMethod, $caseSensitiveMethods, true)) {
$apiMethod = strtolower($apiMethod);
diff --git a/src/Services/Booking/Booking/Result/AddedBookingResult.php b/src/Services/Booking/Booking/Result/AddedBookingResult.php
new file mode 100644
index 00000000..e47262e5
--- /dev/null
+++ b/src/Services/Booking/Booking/Result/AddedBookingResult.php
@@ -0,0 +1,29 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Booking\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AddedItemResult;
+
+class AddedBookingResult extends AddedItemResult
+{
+ /**
+ * @throws BaseException
+ */
+ #[\Override]
+ public function getId(): int
+ {
+ return (int)$this->getCoreResponse()->getResponseData()->getResult()[0];
+ }
+}
diff --git a/src/Services/Booking/Booking/Result/BookingItemResult.php b/src/Services/Booking/Booking/Result/BookingItemResult.php
new file mode 100644
index 00000000..15df9cb2
--- /dev/null
+++ b/src/Services/Booking/Booking/Result/BookingItemResult.php
@@ -0,0 +1,27 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Booking\Result;
+
+use Bitrix24\SDK\Core\Result\AbstractAnnotatedItem;
+
+/**
+ * @property-read int|null $id
+ * @property-read string|null $name
+ * @property-read string|null $description
+ * @property-read array|null $datePeriod
+ * @property-read array|null $resourceIds
+ */
+class BookingItemResult extends AbstractAnnotatedItem
+{
+}
diff --git a/src/Services/Booking/Booking/Result/BookingResult.php b/src/Services/Booking/Booking/Result/BookingResult.php
new file mode 100644
index 00000000..4708cd2b
--- /dev/null
+++ b/src/Services/Booking/Booking/Result/BookingResult.php
@@ -0,0 +1,28 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Booking\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class BookingResult extends AbstractResult
+{
+ /**
+ * @throws BaseException
+ */
+ public function getBooking(): BookingItemResult
+ {
+ return new BookingItemResult($this->getCoreResponse()->getResponseData()->getResult()['booking']);
+ }
+}
diff --git a/src/Services/Booking/Booking/Result/BookingsResult.php b/src/Services/Booking/Booking/Result/BookingsResult.php
new file mode 100644
index 00000000..a30c46b0
--- /dev/null
+++ b/src/Services/Booking/Booking/Result/BookingsResult.php
@@ -0,0 +1,34 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Booking\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class BookingsResult extends AbstractResult
+{
+ /**
+ * @return BookingItemResult[]
+ * @throws BaseException
+ */
+ public function getBookings(): array
+ {
+ $items = [];
+ foreach ($this->getCoreResponse()->getResponseData()->getResult()['booking'] as $item) {
+ $items[] = new BookingItemResult($item);
+ }
+
+ return $items;
+ }
+}
diff --git a/src/Services/Booking/Booking/Service/Booking.php b/src/Services/Booking/Booking/Service/Booking.php
new file mode 100644
index 00000000..b3930150
--- /dev/null
+++ b/src/Services/Booking/Booking/Service/Booking.php
@@ -0,0 +1,182 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Booking\Service;
+
+use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
+use Bitrix24\SDK\Attributes\ApiServiceMetadata;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Exceptions\TransportException;
+use Bitrix24\SDK\Core\Result\AddedItemResult;
+use Bitrix24\SDK\Core\Result\DeletedItemResult;
+use Bitrix24\SDK\Core\Result\UpdatedItemResult;
+use Bitrix24\SDK\Services\AbstractService;
+use Bitrix24\SDK\Services\Booking\Booking\Result\AddedBookingResult;
+use Bitrix24\SDK\Services\Booking\Booking\Result\BookingResult;
+use Bitrix24\SDK\Services\Booking\Booking\Result\BookingsResult;
+use Psr\Log\LoggerInterface;
+
+#[ApiServiceMetadata(new Scope(['booking']))]
+class Booking extends AbstractService
+{
+ public function __construct(CoreInterface $core, LoggerInterface $logger)
+ {
+ parent::__construct($core, $logger);
+ }
+
+ /**
+ * Adds a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-add.html
+ *
+ * @param array $fields
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.add',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-add.html',
+ 'Adds a booking.'
+ )]
+ public function add(array $fields): AddedBookingResult
+ {
+ return new AddedBookingResult(
+ $this->core->call('booking.v1.booking.add', [
+ 'fields' => $fields,
+ ])
+ );
+ }
+
+ /**
+ * Creates a booking from a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-createfromwaitlist.html
+ *
+ * @param array $fields
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.createfromwaitlist',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-createfromwaitlist.html',
+ 'Creates a booking from a waitlist entry.'
+ )]
+ public function createFromWaitlist(int $waitListId, array $fields = []): AddedItemResult
+ {
+ return new AddedItemResult(
+ $this->core->call('booking.v1.booking.createfromwaitlist', [
+ 'waitListId' => $waitListId,
+ 'fields' => $fields,
+ ])
+ );
+ }
+
+ /**
+ * Updates a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-update.html
+ *
+ * @param array $fields
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.update',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-update.html',
+ 'Updates a booking.'
+ )]
+ public function update(int $id, array $fields): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.booking.update', [
+ 'id' => $id,
+ 'fields' => $fields,
+ ])
+ );
+ }
+
+ /**
+ * Retrieves a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-get.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.get',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-get.html',
+ 'Retrieves a booking.'
+ )]
+ public function get(int $id): BookingResult
+ {
+ return new BookingResult(
+ $this->core->call('booking.v1.booking.get', [
+ 'id' => $id,
+ ])
+ );
+ }
+
+ /**
+ * Retrieves a list of bookings.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-list.html
+ *
+ * @param array $filter
+ * @param array $order
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.list',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-list.html',
+ 'Retrieves a list of bookings.'
+ )]
+ public function list(array $filter = [], array $order = []): BookingsResult
+ {
+ return new BookingsResult(
+ $this->core->call('booking.v1.booking.list', [
+ 'filter' => $filter,
+ 'order' => $order,
+ ])
+ );
+ }
+
+ /**
+ * Deletes a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-delete.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.delete',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/booking-v1-booking-delete.html',
+ 'Deletes a booking.'
+ )]
+ public function delete(int $id): DeletedItemResult
+ {
+ return new DeletedItemResult(
+ $this->core->call('booking.v1.booking.delete', [
+ 'id' => $id,
+ ])
+ );
+ }
+}
diff --git a/src/Services/Booking/BookingClient/Result/BookingClientItemResult.php b/src/Services/Booking/BookingClient/Result/BookingClientItemResult.php
new file mode 100644
index 00000000..50427676
--- /dev/null
+++ b/src/Services/Booking/BookingClient/Result/BookingClientItemResult.php
@@ -0,0 +1,24 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\BookingClient\Result;
+
+use Bitrix24\SDK\Core\Result\AbstractAnnotatedItem;
+
+/**
+ * @property-read int|null $id
+ * @property-read array|null $type
+ */
+class BookingClientItemResult extends AbstractAnnotatedItem
+{
+}
diff --git a/src/Services/Booking/BookingClient/Result/BookingClientsResult.php b/src/Services/Booking/BookingClient/Result/BookingClientsResult.php
new file mode 100644
index 00000000..718308b9
--- /dev/null
+++ b/src/Services/Booking/BookingClient/Result/BookingClientsResult.php
@@ -0,0 +1,34 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\BookingClient\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class BookingClientsResult extends AbstractResult
+{
+ /**
+ * @return BookingClientItemResult[]
+ * @throws BaseException
+ */
+ public function getClients(): array
+ {
+ $items = [];
+ foreach ($this->getCoreResponse()->getResponseData()->getResult()['bookingClient'] as $item) {
+ $items[] = new BookingClientItemResult($item);
+ }
+
+ return $items;
+ }
+}
diff --git a/src/Services/Booking/BookingClient/Service/BookingClient.php b/src/Services/Booking/BookingClient/Service/BookingClient.php
new file mode 100644
index 00000000..b9006ea0
--- /dev/null
+++ b/src/Services/Booking/BookingClient/Service/BookingClient.php
@@ -0,0 +1,103 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\BookingClient\Service;
+
+use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
+use Bitrix24\SDK\Attributes\ApiServiceMetadata;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Exceptions\TransportException;
+use Bitrix24\SDK\Core\Result\UpdatedItemResult;
+use Bitrix24\SDK\Services\AbstractService;
+use Bitrix24\SDK\Services\Booking\BookingClient\Result\BookingClientsResult;
+use Psr\Log\LoggerInterface;
+
+#[ApiServiceMetadata(new Scope(['booking']))]
+class BookingClient extends AbstractService
+{
+ public function __construct(CoreInterface $core, LoggerInterface $logger)
+ {
+ parent::__construct($core, $logger);
+ }
+
+ /**
+ * Returns clients linked to a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/client/booking-v1-booking-client-list.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.client.list',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/client/booking-v1-booking-client-list.html',
+ 'Returns clients linked to a booking.'
+ )]
+ public function list(int $bookingId): BookingClientsResult
+ {
+ return new BookingClientsResult(
+ $this->core->call('booking.v1.booking.client.list', [
+ 'bookingId' => $bookingId,
+ ])
+ );
+ }
+
+ /**
+ * Sets clients for a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/client/booking-v1-booking-client-set.html
+ *
+ * @param array> $clients
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.client.set',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/client/booking-v1-booking-client-set.html',
+ 'Sets clients for a booking.'
+ )]
+ public function set(int $bookingId, array $clients): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.booking.client.set', [
+ 'bookingId' => $bookingId,
+ 'clients' => $clients,
+ ])
+ );
+ }
+
+ /**
+ * Removes clients from a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/client/booking-v1-booking-client-unset.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.client.unset',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/client/booking-v1-booking-client-unset.html',
+ 'Removes clients from a booking.'
+ )]
+ public function unset(int $bookingId): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.booking.client.unset', [
+ 'bookingId' => $bookingId,
+ ])
+ );
+ }
+}
diff --git a/src/Services/Booking/BookingExternalData/Result/BookingExternalDataItemResult.php b/src/Services/Booking/BookingExternalData/Result/BookingExternalDataItemResult.php
new file mode 100644
index 00000000..3a58f1bd
--- /dev/null
+++ b/src/Services/Booking/BookingExternalData/Result/BookingExternalDataItemResult.php
@@ -0,0 +1,25 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\BookingExternalData\Result;
+
+use Bitrix24\SDK\Core\Result\AbstractAnnotatedItem;
+
+/**
+ * @property-read string|null $entityTypeId
+ * @property-read string|null $moduleId
+ * @property-read string|null $value
+ */
+class BookingExternalDataItemResult extends AbstractAnnotatedItem
+{
+}
diff --git a/src/Services/Booking/BookingExternalData/Result/BookingExternalDataResult.php b/src/Services/Booking/BookingExternalData/Result/BookingExternalDataResult.php
new file mode 100644
index 00000000..b29efefc
--- /dev/null
+++ b/src/Services/Booking/BookingExternalData/Result/BookingExternalDataResult.php
@@ -0,0 +1,34 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\BookingExternalData\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class BookingExternalDataResult extends AbstractResult
+{
+ /**
+ * @return BookingExternalDataItemResult[]
+ * @throws BaseException
+ */
+ public function getExternalData(): array
+ {
+ $items = [];
+ foreach ($this->getCoreResponse()->getResponseData()->getResult()['externalData'] as $item) {
+ $items[] = new BookingExternalDataItemResult($item);
+ }
+
+ return $items;
+ }
+}
diff --git a/src/Services/Booking/BookingExternalData/Service/BookingExternalData.php b/src/Services/Booking/BookingExternalData/Service/BookingExternalData.php
new file mode 100644
index 00000000..ff318477
--- /dev/null
+++ b/src/Services/Booking/BookingExternalData/Service/BookingExternalData.php
@@ -0,0 +1,103 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\BookingExternalData\Service;
+
+use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
+use Bitrix24\SDK\Attributes\ApiServiceMetadata;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Exceptions\TransportException;
+use Bitrix24\SDK\Core\Result\UpdatedItemResult;
+use Bitrix24\SDK\Services\AbstractService;
+use Bitrix24\SDK\Services\Booking\BookingExternalData\Result\BookingExternalDataResult;
+use Psr\Log\LoggerInterface;
+
+#[ApiServiceMetadata(new Scope(['booking']))]
+class BookingExternalData extends AbstractService
+{
+ public function __construct(CoreInterface $core, LoggerInterface $logger)
+ {
+ parent::__construct($core, $logger);
+ }
+
+ /**
+ * Retrieves external data links for a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/external-data/booking-v1-booking-externaldata-list.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.externalData.list',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/external-data/booking-v1-booking-externaldata-list.html',
+ 'Retrieves external data links for a booking.'
+ )]
+ public function list(int $bookingId): BookingExternalDataResult
+ {
+ return new BookingExternalDataResult(
+ $this->core->call('booking.v1.booking.externalData.list', [
+ 'bookingId' => $bookingId,
+ ])
+ );
+ }
+
+ /**
+ * Sets external data links for a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/external-data/booking-v1-booking-externaldata-set.html
+ *
+ * @param array> $externalData
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.externalData.set',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/external-data/booking-v1-booking-externaldata-set.html',
+ 'Sets external data links for a booking.'
+ )]
+ public function set(int $bookingId, array $externalData): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.booking.externalData.set', [
+ 'bookingId' => $bookingId,
+ 'externalData' => $externalData,
+ ])
+ );
+ }
+
+ /**
+ * Removes external data links from a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking/external-data/booking-v1-booking-externaldata-unset.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.booking.externalData.unset',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking/external-data/booking-v1-booking-externaldata-unset.html',
+ 'Removes external data links from a booking.'
+ )]
+ public function unset(int $bookingId): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.booking.externalData.unset', [
+ 'bookingId' => $bookingId,
+ ])
+ );
+ }
+}
diff --git a/src/Services/Booking/BookingServiceBuilder.php b/src/Services/Booking/BookingServiceBuilder.php
new file mode 100644
index 00000000..75b50665
--- /dev/null
+++ b/src/Services/Booking/BookingServiceBuilder.php
@@ -0,0 +1,152 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking;
+
+use Bitrix24\SDK\Attributes\ApiServiceBuilderMetadata;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Services\AbstractServiceBuilder;
+use Bitrix24\SDK\Services\Booking\Booking\Service\Booking;
+use Bitrix24\SDK\Services\Booking\BookingClient\Service\BookingClient;
+use Bitrix24\SDK\Services\Booking\BookingExternalData\Service\BookingExternalData;
+use Bitrix24\SDK\Services\Booking\ClientType\Service\ClientType;
+use Bitrix24\SDK\Services\Booking\Resource\Service\Resource;
+use Bitrix24\SDK\Services\Booking\ResourceSlots\Service\ResourceSlots;
+use Bitrix24\SDK\Services\Booking\ResourceType\Service\ResourceType;
+use Bitrix24\SDK\Services\Booking\WaitlistClient\Service\WaitlistClient;
+use Bitrix24\SDK\Services\Booking\WaitlistExternalData\Service\WaitlistExternalData;
+use Bitrix24\SDK\Services\Booking\Waitlist\Service\Waitlist;
+
+#[ApiServiceBuilderMetadata(new Scope(['booking']))]
+class BookingServiceBuilder extends AbstractServiceBuilder
+{
+ /**
+ * Booking service (booking.v1.booking.*)
+ */
+ public function booking(): Booking
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new Booking($this->core, $this->log);
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+
+ /**
+ * Booking client service (booking.v1.booking.client.*)
+ */
+ public function bookingClient(): BookingClient
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new BookingClient($this->core, $this->log);
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+
+ /**
+ * Booking external data service (booking.v1.booking.externalData.*)
+ */
+ public function bookingExternalData(): BookingExternalData
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new BookingExternalData($this->core, $this->log);
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+
+ /**
+ * Resource service (booking.v1.resource.*)
+ */
+ public function resource(): Resource
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new Resource($this->core, $this->log);
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+
+ /**
+ * Resource slot service (booking.v1.resource.slots.*)
+ */
+ public function resourceSlots(): ResourceSlots
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new ResourceSlots($this->core, $this->log);
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+
+ /**
+ * Resource type service (booking.v1.resourceType.*)
+ */
+ public function resourceType(): ResourceType
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new ResourceType($this->core, $this->log);
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+
+ /**
+ * Client type service (booking.v1.clienttype.*)
+ */
+ public function clientType(): ClientType
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new ClientType($this->core, $this->log);
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+
+ /**
+ * Waitlist service (booking.v1.waitlist.*)
+ */
+ public function waitlist(): Waitlist
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new Waitlist($this->core, $this->log);
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+
+ /**
+ * Waitlist client service (booking.v1.waitlist.client.*)
+ */
+ public function waitlistClient(): WaitlistClient
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new WaitlistClient($this->core, $this->log);
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+
+ /**
+ * Waitlist external data service (booking.v1.waitlist.externalData.*)
+ */
+ public function waitlistExternalData(): WaitlistExternalData
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new WaitlistExternalData($this->core, $this->log);
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+}
diff --git a/src/Services/Booking/ClientType/Result/ClientTypeItemResult.php b/src/Services/Booking/ClientType/Result/ClientTypeItemResult.php
new file mode 100644
index 00000000..63f835cf
--- /dev/null
+++ b/src/Services/Booking/ClientType/Result/ClientTypeItemResult.php
@@ -0,0 +1,28 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ClientType\Result;
+
+use Bitrix24\SDK\Core\Result\AbstractAnnotatedItem;
+
+/**
+ * Client type item for booking.v1.clienttype.list.
+ *
+ * The live API currently exposes the CRM module name and client code.
+ *
+ * @property-read string|null $code
+ * @property-read string|null $module
+ */
+class ClientTypeItemResult extends AbstractAnnotatedItem
+{
+}
diff --git a/src/Services/Booking/ClientType/Result/ClientTypesResult.php b/src/Services/Booking/ClientType/Result/ClientTypesResult.php
new file mode 100644
index 00000000..cf11cf8c
--- /dev/null
+++ b/src/Services/Booking/ClientType/Result/ClientTypesResult.php
@@ -0,0 +1,37 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ClientType\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+/**
+ * List result for booking.v1.clienttype.list.
+ */
+class ClientTypesResult extends AbstractResult
+{
+ /**
+ * @return ClientTypeItemResult[]
+ * @throws BaseException
+ */
+ public function getClientTypes(): array
+ {
+ $items = [];
+ foreach ($this->getCoreResponse()->getResponseData()->getResult()['clientType'] as $item) {
+ $items[] = new ClientTypeItemResult($item);
+ }
+
+ return $items;
+ }
+}
diff --git a/src/Services/Booking/ClientType/Service/ClientType.php b/src/Services/Booking/ClientType/Service/ClientType.php
new file mode 100644
index 00000000..1cd82e4c
--- /dev/null
+++ b/src/Services/Booking/ClientType/Service/ClientType.php
@@ -0,0 +1,53 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ClientType\Service;
+
+use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
+use Bitrix24\SDK\Attributes\ApiServiceMetadata;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Exceptions\TransportException;
+use Bitrix24\SDK\Services\AbstractService;
+use Bitrix24\SDK\Services\Booking\ClientType\Result\ClientTypesResult;
+use Psr\Log\LoggerInterface;
+
+#[ApiServiceMetadata(new Scope(['booking']))]
+class ClientType extends AbstractService
+{
+ public function __construct(CoreInterface $core, LoggerInterface $logger)
+ {
+ parent::__construct($core, $logger);
+ }
+
+ /**
+ * Retrieves a list of client types.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/booking-v1-clienttype-list.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.clienttype.list',
+ 'https://apidocs.bitrix24.com/api-reference/booking/booking-v1-clienttype-list.html',
+ 'Retrieves a list of client types.'
+ )]
+ public function list(): ClientTypesResult
+ {
+ return new ClientTypesResult(
+ $this->core->call('booking.v1.clienttype.list')
+ );
+ }
+}
diff --git a/src/Services/Booking/Resource/Result/AddedResourceResult.php b/src/Services/Booking/Resource/Result/AddedResourceResult.php
new file mode 100644
index 00000000..1ba9b4dd
--- /dev/null
+++ b/src/Services/Booking/Resource/Result/AddedResourceResult.php
@@ -0,0 +1,29 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Resource\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AddedItemResult;
+
+class AddedResourceResult extends AddedItemResult
+{
+ /**
+ * @throws BaseException
+ */
+ #[\Override]
+ public function getId(): int
+ {
+ return (int)$this->getCoreResponse()->getResponseData()->getResult()[0];
+ }
+}
diff --git a/src/Services/Booking/Resource/Result/ResourceItemResult.php b/src/Services/Booking/Resource/Result/ResourceItemResult.php
new file mode 100644
index 00000000..bd8f42f0
--- /dev/null
+++ b/src/Services/Booking/Resource/Result/ResourceItemResult.php
@@ -0,0 +1,48 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Resource\Result;
+
+use Bitrix24\SDK\Core\Result\AbstractAnnotatedItem;
+
+/**
+ * @property-read int|null $id
+ * @property-read string|null $name
+ * @property-read string|null $description
+ * @property-read int|null $typeId
+ * @property-read string|null $isMain
+ * @property-read string|null $isCancellationNotificationOn
+ * @property-read string|null $isInfoNotificationOn
+ * @property-read string|null $templateTypeInfo
+ * @property-read string|null $isConfirmationNotificationOn
+ * @property-read string|null $templateTypeConfirmation
+ * @property-read string|null $isReminderNotificationOn
+ * @property-read string|null $templateTypeReminder
+ * @property-read string|null $isFeedbackNotificationOn
+ * @property-read string|null $templateTypeFeedback
+ * @property-read string|null $isDelayedNotificationOn
+ * @property-read string|null $templateTypeDelayed
+ * @property-read string|null $senderCode
+ * @property-read int|null $cancellationNotificationDelay
+ * @property-read int|null $infoNotificationDelay
+ * @property-read int|null $reminderNotificationDelay
+ * @property-read int|null $delayedNotificationDelay
+ * @property-read int|null $delayedCounterDelay
+ * @property-read int|null $confirmationNotificationDelay
+ * @property-read int|null $confirmationNotificationRepetitions
+ * @property-read int|null $confirmationNotificationRepetitionsInterval
+ * @property-read int|null $confirmationCounterDelay
+ */
+class ResourceItemResult extends AbstractAnnotatedItem
+{
+}
diff --git a/src/Services/Booking/Resource/Result/ResourceResult.php b/src/Services/Booking/Resource/Result/ResourceResult.php
new file mode 100644
index 00000000..a27a1f85
--- /dev/null
+++ b/src/Services/Booking/Resource/Result/ResourceResult.php
@@ -0,0 +1,28 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Resource\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class ResourceResult extends AbstractResult
+{
+ /**
+ * @throws BaseException
+ */
+ public function getResource(): ResourceItemResult
+ {
+ return new ResourceItemResult($this->getCoreResponse()->getResponseData()->getResult()['resource']);
+ }
+}
diff --git a/src/Services/Booking/Resource/Result/ResourcesResult.php b/src/Services/Booking/Resource/Result/ResourcesResult.php
new file mode 100644
index 00000000..f7bcbc4e
--- /dev/null
+++ b/src/Services/Booking/Resource/Result/ResourcesResult.php
@@ -0,0 +1,34 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Resource\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class ResourcesResult extends AbstractResult
+{
+ /**
+ * @return ResourceItemResult[]
+ * @throws BaseException
+ */
+ public function getResources(): array
+ {
+ $items = [];
+ foreach ($this->getCoreResponse()->getResponseData()->getResult()['resource'] as $item) {
+ $items[] = new ResourceItemResult($item);
+ }
+
+ return $items;
+ }
+}
diff --git a/src/Services/Booking/Resource/Service/Resource.php b/src/Services/Booking/Resource/Service/Resource.php
new file mode 100644
index 00000000..845850ca
--- /dev/null
+++ b/src/Services/Booking/Resource/Service/Resource.php
@@ -0,0 +1,156 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Resource\Service;
+
+use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
+use Bitrix24\SDK\Attributes\ApiServiceMetadata;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Exceptions\TransportException;
+use Bitrix24\SDK\Core\Result\DeletedItemResult;
+use Bitrix24\SDK\Core\Result\UpdatedItemResult;
+use Bitrix24\SDK\Services\AbstractService;
+use Bitrix24\SDK\Services\Booking\Resource\Result\AddedResourceResult;
+use Bitrix24\SDK\Services\Booking\Resource\Result\ResourceResult;
+use Bitrix24\SDK\Services\Booking\Resource\Result\ResourcesResult;
+use Psr\Log\LoggerInterface;
+
+#[ApiServiceMetadata(new Scope(['booking']))]
+class Resource extends AbstractService
+{
+ public function __construct(CoreInterface $core, LoggerInterface $logger)
+ {
+ parent::__construct($core, $logger);
+ }
+
+ /**
+ * Adds a new resource.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/booking-v1-resource-add.html
+ *
+ * @param array $fields
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resource.add',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/booking-v1-resource-add.html',
+ 'Adds a new resource.'
+ )]
+ public function add(array $fields): AddedResourceResult
+ {
+ return new AddedResourceResult(
+ $this->core->call('booking.v1.resource.add', [
+ 'fields' => $fields,
+ ])
+ );
+ }
+
+ /**
+ * Updates a resource.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/booking-v1-resource-update.html
+ *
+ * @param array $fields
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resource.update',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/booking-v1-resource-update.html',
+ 'Updates a resource.'
+ )]
+ public function update(int $id, array $fields): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.resource.update', [
+ 'id' => $id,
+ 'fields' => $fields,
+ ])
+ );
+ }
+
+ /**
+ * Retrieves a resource.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/booking-v1-resource-get.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resource.get',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/booking-v1-resource-get.html',
+ 'Retrieves a resource.'
+ )]
+ public function get(int $id): ResourceResult
+ {
+ return new ResourceResult(
+ $this->core->call('booking.v1.resource.get', [
+ 'id' => $id,
+ ])
+ );
+ }
+
+ /**
+ * Retrieves a list of resources.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/booking-v1-resource-list.html
+ *
+ * @param array $filter
+ * @param array $order
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resource.list',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/booking-v1-resource-list.html',
+ 'Retrieves a list of resources.'
+ )]
+ public function list(array $filter = [], array $order = []): ResourcesResult
+ {
+ return new ResourcesResult(
+ $this->core->call('booking.v1.resource.list', [
+ 'filter' => $filter,
+ 'order' => $order,
+ ])
+ );
+ }
+
+ /**
+ * Deletes a resource.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/booking-v1-resource-delete.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resource.delete',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/booking-v1-resource-delete.html',
+ 'Deletes a resource.'
+ )]
+ public function delete(int $id): DeletedItemResult
+ {
+ return new DeletedItemResult(
+ $this->core->call('booking.v1.resource.delete', [
+ 'id' => $id,
+ ])
+ );
+ }
+}
diff --git a/src/Services/Booking/ResourceSlots/Result/ResourceSlotItemResult.php b/src/Services/Booking/ResourceSlots/Result/ResourceSlotItemResult.php
new file mode 100644
index 00000000..f0da60c3
--- /dev/null
+++ b/src/Services/Booking/ResourceSlots/Result/ResourceSlotItemResult.php
@@ -0,0 +1,28 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ResourceSlots\Result;
+
+use Bitrix24\SDK\Core\Result\AbstractAnnotatedItem;
+
+/**
+ * @property-read int|null $id
+ * @property-read int|null $from
+ * @property-read int|null $to
+ * @property-read string|null $timezone
+ * @property-read array|null $weekDays
+ * @property-read int|null $slotSize
+ */
+class ResourceSlotItemResult extends AbstractAnnotatedItem
+{
+}
diff --git a/src/Services/Booking/ResourceSlots/Result/ResourceSlotsResult.php b/src/Services/Booking/ResourceSlots/Result/ResourceSlotsResult.php
new file mode 100644
index 00000000..fa3fa19e
--- /dev/null
+++ b/src/Services/Booking/ResourceSlots/Result/ResourceSlotsResult.php
@@ -0,0 +1,34 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ResourceSlots\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class ResourceSlotsResult extends AbstractResult
+{
+ /**
+ * @return ResourceSlotItemResult[]
+ * @throws BaseException
+ */
+ public function getSlots(): array
+ {
+ $items = [];
+ foreach ($this->getCoreResponse()->getResponseData()->getResult()['slots'] as $item) {
+ $items[] = new ResourceSlotItemResult($item);
+ }
+
+ return $items;
+ }
+}
diff --git a/src/Services/Booking/ResourceSlots/Service/ResourceSlots.php b/src/Services/Booking/ResourceSlots/Service/ResourceSlots.php
new file mode 100644
index 00000000..38d3e78b
--- /dev/null
+++ b/src/Services/Booking/ResourceSlots/Service/ResourceSlots.php
@@ -0,0 +1,103 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ResourceSlots\Service;
+
+use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
+use Bitrix24\SDK\Attributes\ApiServiceMetadata;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Exceptions\TransportException;
+use Bitrix24\SDK\Core\Result\UpdatedItemResult;
+use Bitrix24\SDK\Services\AbstractService;
+use Bitrix24\SDK\Services\Booking\ResourceSlots\Result\ResourceSlotsResult;
+use Psr\Log\LoggerInterface;
+
+#[ApiServiceMetadata(new Scope(['booking']))]
+class ResourceSlots extends AbstractService
+{
+ public function __construct(CoreInterface $core, LoggerInterface $logger)
+ {
+ parent::__construct($core, $logger);
+ }
+
+ /**
+ * Sets slots for a resource.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/slots/booking-v1-resource-slots-set.html
+ *
+ * @param array> $slots
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resource.slots.set',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/slots/booking-v1-resource-slots-set.html',
+ 'Sets slots for a resource.'
+ )]
+ public function set(int $resourceId, array $slots): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.resource.slots.set', [
+ 'resourceId' => $resourceId,
+ 'slots' => $slots,
+ ])
+ );
+ }
+
+ /**
+ * Retrieves slot settings for a resource.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/slots/booking-v1-resource-slots-list.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resource.slots.list',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/slots/booking-v1-resource-slots-list.html',
+ 'Retrieves slot settings for a resource.'
+ )]
+ public function list(int $resourceId): ResourceSlotsResult
+ {
+ return new ResourceSlotsResult(
+ $this->core->call('booking.v1.resource.slots.list', [
+ 'resourceId' => $resourceId,
+ ])
+ );
+ }
+
+ /**
+ * Removes slots for a resource.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/slots/booking-v1-resource-slots-unset.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resource.slots.unset',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/slots/booking-v1-resource-slots-unset.html',
+ 'Removes slots for a resource.'
+ )]
+ public function unset(int $resourceId): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.resource.slots.unset', [
+ 'resourceId' => $resourceId,
+ ])
+ );
+ }
+}
diff --git a/src/Services/Booking/ResourceType/Result/AddedResourceTypeResult.php b/src/Services/Booking/ResourceType/Result/AddedResourceTypeResult.php
new file mode 100644
index 00000000..3e6cbe3d
--- /dev/null
+++ b/src/Services/Booking/ResourceType/Result/AddedResourceTypeResult.php
@@ -0,0 +1,29 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ResourceType\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AddedItemResult;
+
+class AddedResourceTypeResult extends AddedItemResult
+{
+ /**
+ * @throws BaseException
+ */
+ #[\Override]
+ public function getId(): int
+ {
+ return (int)$this->getCoreResponse()->getResponseData()->getResult()[0];
+ }
+}
diff --git a/src/Services/Booking/ResourceType/Result/ResourceTypeItemResult.php b/src/Services/Booking/ResourceType/Result/ResourceTypeItemResult.php
new file mode 100644
index 00000000..a5d300b0
--- /dev/null
+++ b/src/Services/Booking/ResourceType/Result/ResourceTypeItemResult.php
@@ -0,0 +1,45 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ResourceType\Result;
+
+use Bitrix24\SDK\Core\Result\AbstractAnnotatedItem;
+
+/**
+ * @property-read int|null $id
+ * @property-read string|null $code
+ * @property-read string|null $name
+ * @property-read int|null $cancellationNotificationDelay
+ * @property-read int|null $confirmationCounterDelay
+ * @property-read int|null $confirmationNotificationDelay
+ * @property-read int|null $confirmationNotificationRepetitions
+ * @property-read int|null $confirmationNotificationRepetitionsInterval
+ * @property-read int|null $delayedCounterDelay
+ * @property-read int|null $delayedNotificationDelay
+ * @property-read int|null $infoNotificationDelay
+ * @property-read string|null $isCancellationNotificationOn
+ * @property-read string|null $isConfirmationNotificationOn
+ * @property-read string|null $isDelayedNotificationOn
+ * @property-read string|null $isFeedbackNotificationOn
+ * @property-read string|null $isInfoNotificationOn
+ * @property-read string|null $isReminderNotificationOn
+ * @property-read int|null $reminderNotificationDelay
+ * @property-read string|null $senderCode
+ * @property-read string|null $templateTypeConfirmation
+ * @property-read string|null $templateTypeDelayed
+ * @property-read string|null $templateTypeFeedback
+ * @property-read string|null $templateTypeReminder
+ */
+class ResourceTypeItemResult extends AbstractAnnotatedItem
+{
+}
diff --git a/src/Services/Booking/ResourceType/Result/ResourceTypeResult.php b/src/Services/Booking/ResourceType/Result/ResourceTypeResult.php
new file mode 100644
index 00000000..32bf59b9
--- /dev/null
+++ b/src/Services/Booking/ResourceType/Result/ResourceTypeResult.php
@@ -0,0 +1,28 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ResourceType\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class ResourceTypeResult extends AbstractResult
+{
+ /**
+ * @throws BaseException
+ */
+ public function getResourceType(): ResourceTypeItemResult
+ {
+ return new ResourceTypeItemResult($this->getCoreResponse()->getResponseData()->getResult()['resourceType']);
+ }
+}
diff --git a/src/Services/Booking/ResourceType/Result/ResourceTypesResult.php b/src/Services/Booking/ResourceType/Result/ResourceTypesResult.php
new file mode 100644
index 00000000..6d2fad38
--- /dev/null
+++ b/src/Services/Booking/ResourceType/Result/ResourceTypesResult.php
@@ -0,0 +1,34 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ResourceType\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class ResourceTypesResult extends AbstractResult
+{
+ /**
+ * @return ResourceTypeItemResult[]
+ * @throws BaseException
+ */
+ public function getResourceTypes(): array
+ {
+ $items = [];
+ foreach ($this->getCoreResponse()->getResponseData()->getResult()['resourceType'] as $item) {
+ $items[] = new ResourceTypeItemResult($item);
+ }
+
+ return $items;
+ }
+}
diff --git a/src/Services/Booking/ResourceType/Service/ResourceType.php b/src/Services/Booking/ResourceType/Service/ResourceType.php
new file mode 100644
index 00000000..00c0bd3c
--- /dev/null
+++ b/src/Services/Booking/ResourceType/Service/ResourceType.php
@@ -0,0 +1,156 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\ResourceType\Service;
+
+use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
+use Bitrix24\SDK\Attributes\ApiServiceMetadata;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Exceptions\TransportException;
+use Bitrix24\SDK\Core\Result\DeletedItemResult;
+use Bitrix24\SDK\Core\Result\UpdatedItemResult;
+use Bitrix24\SDK\Services\AbstractService;
+use Bitrix24\SDK\Services\Booking\ResourceType\Result\AddedResourceTypeResult;
+use Bitrix24\SDK\Services\Booking\ResourceType\Result\ResourceTypeResult;
+use Bitrix24\SDK\Services\Booking\ResourceType\Result\ResourceTypesResult;
+use Psr\Log\LoggerInterface;
+
+#[ApiServiceMetadata(new Scope(['booking']))]
+class ResourceType extends AbstractService
+{
+ public function __construct(CoreInterface $core, LoggerInterface $logger)
+ {
+ parent::__construct($core, $logger);
+ }
+
+ /**
+ * Adds a new resource type.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/resource-type/booking-v1-resourcetype-add.html
+ *
+ * @param array $fields
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resourceType.add',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/resource-type/booking-v1-resourcetype-add.html',
+ 'Adds a new resource type.'
+ )]
+ public function add(array $fields): AddedResourceTypeResult
+ {
+ return new AddedResourceTypeResult(
+ $this->core->call('booking.v1.resourceType.add', [
+ 'fields' => $fields,
+ ])
+ );
+ }
+
+ /**
+ * Updates a resource type.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/resource-type/booking-v1-resourcetype-update.html
+ *
+ * @param array $fields
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resourceType.update',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/resource-type/booking-v1-resourcetype-update.html',
+ 'Updates a resource type.'
+ )]
+ public function update(int $id, array $fields): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.resourceType.update', [
+ 'id' => $id,
+ 'fields' => $fields,
+ ])
+ );
+ }
+
+ /**
+ * Retrieves a resource type.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/resource-type/booking-v1-resourcetype-get.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resourceType.get',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/resource-type/booking-v1-resourcetype-get.html',
+ 'Retrieves a resource type.'
+ )]
+ public function get(int $id): ResourceTypeResult
+ {
+ return new ResourceTypeResult(
+ $this->core->call('booking.v1.resourceType.get', [
+ 'id' => $id,
+ ])
+ );
+ }
+
+ /**
+ * Retrieves a list of resource types.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/resource-type/booking-v1-resourcetype-list.html
+ *
+ * @param array $filter
+ * @param array $order
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resourceType.list',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/resource-type/booking-v1-resourcetype-list.html',
+ 'Retrieves a list of resource types.'
+ )]
+ public function list(array $filter = [], array $order = []): ResourceTypesResult
+ {
+ return new ResourceTypesResult(
+ $this->core->call('booking.v1.resourceType.list', [
+ 'filter' => $filter,
+ 'order' => $order,
+ ])
+ );
+ }
+
+ /**
+ * Deletes a resource type.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/resource/resource-type/booking-v1-resourcetype-delete.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.resourceType.delete',
+ 'https://apidocs.bitrix24.com/api-reference/booking/resource/resource-type/booking-v1-resourcetype-delete.html',
+ 'Deletes a resource type.'
+ )]
+ public function delete(int $id): DeletedItemResult
+ {
+ return new DeletedItemResult(
+ $this->core->call('booking.v1.resourceType.delete', [
+ 'id' => $id,
+ ])
+ );
+ }
+}
diff --git a/src/Services/Booking/Waitlist/Result/AddedWaitlistResult.php b/src/Services/Booking/Waitlist/Result/AddedWaitlistResult.php
new file mode 100644
index 00000000..4189d4c0
--- /dev/null
+++ b/src/Services/Booking/Waitlist/Result/AddedWaitlistResult.php
@@ -0,0 +1,29 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Waitlist\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AddedItemResult;
+
+class AddedWaitlistResult extends AddedItemResult
+{
+ /**
+ * @throws BaseException
+ */
+ #[\Override]
+ public function getId(): int
+ {
+ return (int)$this->getCoreResponse()->getResponseData()->getResult()[0];
+ }
+}
diff --git a/src/Services/Booking/Waitlist/Result/WaitlistItemResult.php b/src/Services/Booking/Waitlist/Result/WaitlistItemResult.php
new file mode 100644
index 00000000..adbccfba
--- /dev/null
+++ b/src/Services/Booking/Waitlist/Result/WaitlistItemResult.php
@@ -0,0 +1,24 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Waitlist\Result;
+
+use Bitrix24\SDK\Core\Result\AbstractAnnotatedItem;
+
+/**
+ * @property-read int|null $id
+ * @property-read string|null $note
+ */
+class WaitlistItemResult extends AbstractAnnotatedItem
+{
+}
diff --git a/src/Services/Booking/Waitlist/Result/WaitlistResult.php b/src/Services/Booking/Waitlist/Result/WaitlistResult.php
new file mode 100644
index 00000000..404ab1f1
--- /dev/null
+++ b/src/Services/Booking/Waitlist/Result/WaitlistResult.php
@@ -0,0 +1,28 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Waitlist\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class WaitlistResult extends AbstractResult
+{
+ /**
+ * @throws BaseException
+ */
+ public function getWaitlist(): WaitlistItemResult
+ {
+ return new WaitlistItemResult($this->getCoreResponse()->getResponseData()->getResult()['waitList']);
+ }
+}
diff --git a/src/Services/Booking/Waitlist/Result/WaitlistsResult.php b/src/Services/Booking/Waitlist/Result/WaitlistsResult.php
new file mode 100644
index 00000000..ddf03f99
--- /dev/null
+++ b/src/Services/Booking/Waitlist/Result/WaitlistsResult.php
@@ -0,0 +1,34 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Waitlist\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class WaitlistsResult extends AbstractResult
+{
+ /**
+ * @return WaitlistItemResult[]
+ * @throws BaseException
+ */
+ public function getWaitlists(): array
+ {
+ $items = [];
+ foreach ($this->getCoreResponse()->getResponseData()->getResult()['waitList'] as $item) {
+ $items[] = new WaitlistItemResult($item);
+ }
+
+ return $items;
+ }
+}
diff --git a/src/Services/Booking/Waitlist/Service/Waitlist.php b/src/Services/Booking/Waitlist/Service/Waitlist.php
new file mode 100644
index 00000000..0f4f7c3c
--- /dev/null
+++ b/src/Services/Booking/Waitlist/Service/Waitlist.php
@@ -0,0 +1,177 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\Waitlist\Service;
+
+use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
+use Bitrix24\SDK\Attributes\ApiServiceMetadata;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Exceptions\TransportException;
+use Bitrix24\SDK\Core\Result\AddedItemResult;
+use Bitrix24\SDK\Core\Result\DeletedItemResult;
+use Bitrix24\SDK\Core\Result\UpdatedItemResult;
+use Bitrix24\SDK\Services\AbstractService;
+use Bitrix24\SDK\Services\Booking\Waitlist\Result\AddedWaitlistResult;
+use Bitrix24\SDK\Services\Booking\Waitlist\Result\WaitlistResult;
+use Bitrix24\SDK\Services\Booking\Waitlist\Result\WaitlistsResult;
+use Psr\Log\LoggerInterface;
+
+#[ApiServiceMetadata(new Scope(['booking']))]
+class Waitlist extends AbstractService
+{
+ public function __construct(CoreInterface $core, LoggerInterface $logger)
+ {
+ parent::__construct($core, $logger);
+ }
+
+ /**
+ * Adds a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-add.html
+ *
+ * @param array $fields
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.add',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-add.html',
+ 'Adds a waitlist entry.'
+ )]
+ public function add(array $fields): AddedWaitlistResult
+ {
+ return new AddedWaitlistResult(
+ $this->core->call('booking.v1.waitlist.add', [
+ 'fields' => $fields,
+ ])
+ );
+ }
+
+ /**
+ * Creates a waitlist entry from a booking.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-createfrombooking.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.createfrombooking',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-createfrombooking.html',
+ 'Creates a waitlist entry from a booking.'
+ )]
+ public function createFromBooking(int $bookingId): AddedItemResult
+ {
+ return new AddedItemResult(
+ $this->core->call('booking.v1.waitlist.createfrombooking', [
+ 'bookingId' => $bookingId,
+ ])
+ );
+ }
+
+ /**
+ * Updates a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-update.html
+ *
+ * @param array $fields
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.update',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-update.html',
+ 'Updates a waitlist entry.'
+ )]
+ public function update(int $id, array $fields): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.waitlist.update', [
+ 'id' => $id,
+ 'fields' => $fields,
+ ])
+ );
+ }
+
+ /**
+ * Retrieves a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-get.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.get',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-get.html',
+ 'Retrieves a waitlist entry.'
+ )]
+ public function get(int $id): WaitlistResult
+ {
+ return new WaitlistResult(
+ $this->core->call('booking.v1.waitlist.get', [
+ 'id' => $id,
+ ])
+ );
+ }
+
+ /**
+ * Retrieves a list of waitlist entries.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-list.html
+ *
+ * @param array $filter
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.list',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-list.html',
+ 'Retrieves a list of waitlist entries.'
+ )]
+ public function list(array $filter = []): WaitlistsResult
+ {
+ return new WaitlistsResult(
+ $this->core->call('booking.v1.waitlist.list', [
+ 'filter' => $filter,
+ ])
+ );
+ }
+
+ /**
+ * Deletes a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-delete.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.delete',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/booking-v1-waitlist-delete.html',
+ 'Deletes a waitlist entry.'
+ )]
+ public function delete(int $id): DeletedItemResult
+ {
+ return new DeletedItemResult(
+ $this->core->call('booking.v1.waitlist.delete', [
+ 'id' => $id,
+ ])
+ );
+ }
+}
diff --git a/src/Services/Booking/WaitlistClient/Result/WaitlistClientItemResult.php b/src/Services/Booking/WaitlistClient/Result/WaitlistClientItemResult.php
new file mode 100644
index 00000000..f9e8eba7
--- /dev/null
+++ b/src/Services/Booking/WaitlistClient/Result/WaitlistClientItemResult.php
@@ -0,0 +1,24 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\WaitlistClient\Result;
+
+use Bitrix24\SDK\Core\Result\AbstractAnnotatedItem;
+
+/**
+ * @property-read int|null $id
+ * @property-read array|null $type
+ */
+class WaitlistClientItemResult extends AbstractAnnotatedItem
+{
+}
diff --git a/src/Services/Booking/WaitlistClient/Result/WaitlistClientsResult.php b/src/Services/Booking/WaitlistClient/Result/WaitlistClientsResult.php
new file mode 100644
index 00000000..7d97bd95
--- /dev/null
+++ b/src/Services/Booking/WaitlistClient/Result/WaitlistClientsResult.php
@@ -0,0 +1,34 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\WaitlistClient\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class WaitlistClientsResult extends AbstractResult
+{
+ /**
+ * @return WaitlistClientItemResult[]
+ * @throws BaseException
+ */
+ public function getClients(): array
+ {
+ $items = [];
+ foreach ($this->getCoreResponse()->getResponseData()->getResult()['waitListClient'] as $item) {
+ $items[] = new WaitlistClientItemResult($item);
+ }
+
+ return $items;
+ }
+}
diff --git a/src/Services/Booking/WaitlistClient/Service/WaitlistClient.php b/src/Services/Booking/WaitlistClient/Service/WaitlistClient.php
new file mode 100644
index 00000000..503cf470
--- /dev/null
+++ b/src/Services/Booking/WaitlistClient/Service/WaitlistClient.php
@@ -0,0 +1,103 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\WaitlistClient\Service;
+
+use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
+use Bitrix24\SDK\Attributes\ApiServiceMetadata;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Exceptions\TransportException;
+use Bitrix24\SDK\Core\Result\UpdatedItemResult;
+use Bitrix24\SDK\Services\AbstractService;
+use Bitrix24\SDK\Services\Booking\WaitlistClient\Result\WaitlistClientsResult;
+use Psr\Log\LoggerInterface;
+
+#[ApiServiceMetadata(new Scope(['booking']))]
+class WaitlistClient extends AbstractService
+{
+ public function __construct(CoreInterface $core, LoggerInterface $logger)
+ {
+ parent::__construct($core, $logger);
+ }
+
+ /**
+ * Returns clients linked to a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/client/booking-v1-waitlist-client-list.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.client.list',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/client/booking-v1-waitlist-client-list.html',
+ 'Returns clients linked to a waitlist entry.'
+ )]
+ public function list(int $waitListId): WaitlistClientsResult
+ {
+ return new WaitlistClientsResult(
+ $this->core->call('booking.v1.waitlist.client.list', [
+ 'waitListId' => $waitListId,
+ ])
+ );
+ }
+
+ /**
+ * Sets clients for a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/client/booking-v1-waitlist-client-set.html
+ *
+ * @param array> $clients
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.client.set',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/client/booking-v1-waitlist-client-set.html',
+ 'Sets clients for a waitlist entry.'
+ )]
+ public function set(int $waitListId, array $clients): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.waitlist.client.set', [
+ 'waitListId' => $waitListId,
+ 'clients' => $clients,
+ ])
+ );
+ }
+
+ /**
+ * Removes clients from a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/client/booking-v1-waitlist-client-unset.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.client.unset',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/client/booking-v1-waitlist-client-unset.html',
+ 'Removes clients from a waitlist entry.'
+ )]
+ public function unset(int $waitListId): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.waitlist.client.unset', [
+ 'waitListId' => $waitListId,
+ ])
+ );
+ }
+}
diff --git a/src/Services/Booking/WaitlistExternalData/Result/WaitlistExternalDataItemResult.php b/src/Services/Booking/WaitlistExternalData/Result/WaitlistExternalDataItemResult.php
new file mode 100644
index 00000000..5309d75e
--- /dev/null
+++ b/src/Services/Booking/WaitlistExternalData/Result/WaitlistExternalDataItemResult.php
@@ -0,0 +1,25 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\WaitlistExternalData\Result;
+
+use Bitrix24\SDK\Core\Result\AbstractAnnotatedItem;
+
+/**
+ * @property-read string|null $entityTypeId
+ * @property-read string|null $moduleId
+ * @property-read string|null $value
+ */
+class WaitlistExternalDataItemResult extends AbstractAnnotatedItem
+{
+}
diff --git a/src/Services/Booking/WaitlistExternalData/Result/WaitlistExternalDataResult.php b/src/Services/Booking/WaitlistExternalData/Result/WaitlistExternalDataResult.php
new file mode 100644
index 00000000..abafb612
--- /dev/null
+++ b/src/Services/Booking/WaitlistExternalData/Result/WaitlistExternalDataResult.php
@@ -0,0 +1,34 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\WaitlistExternalData\Result;
+
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Result\AbstractResult;
+
+class WaitlistExternalDataResult extends AbstractResult
+{
+ /**
+ * @return WaitlistExternalDataItemResult[]
+ * @throws BaseException
+ */
+ public function getExternalData(): array
+ {
+ $items = [];
+ foreach ($this->getCoreResponse()->getResponseData()->getResult()['externalData'] as $item) {
+ $items[] = new WaitlistExternalDataItemResult($item);
+ }
+
+ return $items;
+ }
+}
diff --git a/src/Services/Booking/WaitlistExternalData/Service/WaitlistExternalData.php b/src/Services/Booking/WaitlistExternalData/Service/WaitlistExternalData.php
new file mode 100644
index 00000000..e25b0664
--- /dev/null
+++ b/src/Services/Booking/WaitlistExternalData/Service/WaitlistExternalData.php
@@ -0,0 +1,103 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Services\Booking\WaitlistExternalData\Service;
+
+use Bitrix24\SDK\Attributes\ApiEndpointMetadata;
+use Bitrix24\SDK\Attributes\ApiServiceMetadata;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\Credentials\Scope;
+use Bitrix24\SDK\Core\Exceptions\BaseException;
+use Bitrix24\SDK\Core\Exceptions\TransportException;
+use Bitrix24\SDK\Core\Result\UpdatedItemResult;
+use Bitrix24\SDK\Services\AbstractService;
+use Bitrix24\SDK\Services\Booking\WaitlistExternalData\Result\WaitlistExternalDataResult;
+use Psr\Log\LoggerInterface;
+
+#[ApiServiceMetadata(new Scope(['booking']))]
+class WaitlistExternalData extends AbstractService
+{
+ public function __construct(CoreInterface $core, LoggerInterface $logger)
+ {
+ parent::__construct($core, $logger);
+ }
+
+ /**
+ * Retrieves external data links for a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/external-data/booking-v1-waitlist-externaldata-list.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.externalData.list',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/external-data/booking-v1-waitlist-externaldata-list.html',
+ 'Retrieves external data links for a waitlist entry.'
+ )]
+ public function list(int $waitListId): WaitlistExternalDataResult
+ {
+ return new WaitlistExternalDataResult(
+ $this->core->call('booking.v1.waitlist.externalData.list', [
+ 'waitListId' => $waitListId,
+ ])
+ );
+ }
+
+ /**
+ * Sets external data links for a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/external-data/booking-v1-waitlist-externaldata-set.html
+ *
+ * @param array> $externalData
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.externalData.set',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/external-data/booking-v1-waitlist-externaldata-set.html',
+ 'Sets external data links for a waitlist entry.'
+ )]
+ public function set(int $waitListId, array $externalData): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.waitlist.externalData.set', [
+ 'waitListId' => $waitListId,
+ 'externalData' => $externalData,
+ ])
+ );
+ }
+
+ /**
+ * Removes external data links from a waitlist entry.
+ *
+ * @link https://apidocs.bitrix24.com/api-reference/booking/waitlist/external-data/booking-v1-waitlist-externaldata-unset.html
+ *
+ * @throws BaseException
+ * @throws TransportException
+ */
+ #[ApiEndpointMetadata(
+ 'booking.v1.waitlist.externalData.unset',
+ 'https://apidocs.bitrix24.com/api-reference/booking/waitlist/external-data/booking-v1-waitlist-externaldata-unset.html',
+ 'Removes external data links from a waitlist entry.'
+ )]
+ public function unset(int $waitListId): UpdatedItemResult
+ {
+ return new UpdatedItemResult(
+ $this->core->call('booking.v1.waitlist.externalData.unset', [
+ 'waitListId' => $waitListId,
+ ])
+ );
+ }
+}
diff --git a/src/Services/ServiceBuilder.php b/src/Services/ServiceBuilder.php
index 417ca0d6..eca0da2d 100644
--- a/src/Services/ServiceBuilder.php
+++ b/src/Services/ServiceBuilder.php
@@ -17,6 +17,7 @@
use Bitrix24\SDK\Core\Contracts\BulkItemsReaderInterface;
use Bitrix24\SDK\Core\Contracts\CoreInterface;
use Bitrix24\SDK\Services\AI\AIServiceBuilder;
+use Bitrix24\SDK\Services\Booking\BookingServiceBuilder;
use Bitrix24\SDK\Services\Catalog\CatalogServiceBuilder;
use Bitrix24\SDK\Services\CRM\CRMServiceBuilder;
use Bitrix24\SDK\Services\Disk\DiskServiceBuilder;
@@ -283,6 +284,20 @@ public function getCatalogScope(): CatalogServiceBuilder
return $this->serviceCache[__METHOD__];
}
+ public function getBookingScope(): BookingServiceBuilder
+ {
+ if (!isset($this->serviceCache[__METHOD__])) {
+ $this->serviceCache[__METHOD__] = new BookingServiceBuilder(
+ $this->core,
+ $this->batch,
+ $this->bulkItemsReader,
+ $this->log
+ );
+ }
+
+ return $this->serviceCache[__METHOD__];
+ }
+
public function getBizProcScope(): WorkflowsServiceBuilder
{
if (!isset($this->serviceCache[__METHOD__])) {
diff --git a/tests/Integration/Fabric.php b/tests/Integration/Fabric.php
new file mode 100644
index 00000000..e73f10c4
--- /dev/null
+++ b/tests/Integration/Fabric.php
@@ -0,0 +1,146 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration;
+
+use Bitrix24\SDK\Core\Batch;
+use Bitrix24\SDK\Core\BulkItemsReader\BulkItemsReaderBuilder;
+use Bitrix24\SDK\Core\Contracts\BulkItemsReaderInterface;
+use Bitrix24\SDK\Core\Contracts\CoreInterface;
+use Bitrix24\SDK\Core\CoreBuilder;
+use Bitrix24\SDK\Core\Credentials\ApplicationProfile;
+use Bitrix24\SDK\Core\Credentials\Credentials;
+use Bitrix24\SDK\Core\Credentials\WebhookUrl;
+use Bitrix24\SDK\Core\Exceptions\InvalidArgumentException;
+use Bitrix24\SDK\Events\AuthTokenRenewedEvent;
+use Bitrix24\SDK\Services\ServiceBuilder;
+use Bitrix24\SDK\Tests\ApplicationBridge\ApplicationCredentialsProvider;
+use Monolog\Handler\StreamHandler;
+use Monolog\Logger;
+use Monolog\Processor\IntrospectionProcessor;
+use Monolog\Processor\MemoryUsageProcessor;
+use Psr\Log\LoggerInterface;
+use Symfony\Component\Dotenv\Dotenv;
+use Symfony\Component\EventDispatcher\EventDispatcher;
+
+/**
+ * Class Fabric
+ *
+ * @package Bitrix24\SDK\Tests\Integration
+ */
+class Fabric
+{
+ /**
+ * @param bool $isNeedApplicationCredentials some rest-api methods need application credentials, incoming webhook doesn't work for call this methods
+ * @return ServiceBuilder
+ * @throws InvalidArgumentException
+ */
+ public static function getServiceBuilder(bool $isNeedApplicationCredentials = false): ServiceBuilder
+ {
+ return new ServiceBuilder(
+ self::getCore($isNeedApplicationCredentials),
+ self::getBatchService($isNeedApplicationCredentials),
+ self::getBulkItemsReader(),
+ self::getLogger()
+ );
+ }
+
+ /**
+ * @return string
+ */
+ public static function getOpenLineCode(): string
+ {
+ return (string)$_ENV['INTEGRATION_TEST_OPEN_LINE_CODE'];
+ }
+
+ /**
+ * @return \Bitrix24\SDK\Core\Contracts\BulkItemsReaderInterface
+ * @throws InvalidArgumentException
+ */
+ public static function getBulkItemsReader(): BulkItemsReaderInterface
+ {
+ return (new BulkItemsReaderBuilder(self::getCore(), self::getBatchService(), self::getLogger()))->build();
+ }
+
+ /**
+ * @param bool $isNeedApplicationCredentials
+ * @return CoreInterface
+ * @throws InvalidArgumentException
+ */
+ public static function getCore(bool $isNeedApplicationCredentials = false): CoreInterface
+ {
+ $default = (new CoreBuilder())
+ ->withLogger(self::getLogger())
+ ->withCredentials(
+ Credentials::createFromWebhook(
+ new WebhookUrl($_ENV['BITRIX24_PHP_SDK_PLAYGROUND_WEBHOOK'] ?? $_ENV['BITRIX24_WEBHOOK'])
+ )
+ )
+ ->build();
+
+ if ($isNeedApplicationCredentials) {
+ // load application credentials and rewrite default incoming webhook credentials from bootstrap.php file
+ (new Dotenv())->loadEnv(dirname(__DIR__, 2) . '/tests/ApplicationBridge/.env');
+
+ $credentialsProvider = ApplicationCredentialsProvider::buildProviderForLocalApplication();
+
+ if (!$credentialsProvider->isCredentialsAvailable()) {
+ throw new InvalidArgumentException(
+ 'Application credentials for integration tests are not available. Go to «tests/ApplicationBridge/» and run application bridge.'
+ );
+ }
+
+ // register event handler for store new tokens
+ $eventDispatcher = new EventDispatcher();
+ $eventDispatcher->addListener(AuthTokenRenewedEvent::class, [
+ $credentialsProvider,
+ 'onAuthTokenRenewedEventListener'
+ ]);
+
+ $credentials = $credentialsProvider->getCredentials(
+ ApplicationProfile::initFromArray($_ENV),
+ $_ENV['BITRIX24_PHP_SDK_APPLICATION_DOMAIN_URL']
+ );
+ return (new CoreBuilder())
+ ->withLogger(self::getLogger())
+ ->withEventDispatcher($eventDispatcher)
+ ->withCredentials($credentials)
+ ->build();
+ }
+
+ return $default;
+ }
+
+ /**
+ * @return \Psr\Log\LoggerInterface
+ */
+ public static function getLogger(): LoggerInterface
+ {
+ $log = new Logger('integration-test');
+ $log->pushHandler(new StreamHandler(STDOUT, (int)$_ENV['INTEGRATION_TEST_LOG_LEVEL']));
+ $log->pushProcessor(new MemoryUsageProcessor(true, true));
+ $log->pushProcessor(new IntrospectionProcessor());
+
+ return $log;
+ }
+
+ /**
+ * @param bool $isNeedApplicationCredentials
+ * @return Batch
+ * @throws InvalidArgumentException
+ */
+ public static function getBatchService(bool $isNeedApplicationCredentials = false): Batch
+ {
+ return new Batch(self::getCore($isNeedApplicationCredentials), self::getLogger());
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/Booking/Result/BookingItemResultAnnotationsTest.php b/tests/Integration/Services/Booking/Booking/Result/BookingItemResultAnnotationsTest.php
new file mode 100644
index 00000000..b455b0a2
--- /dev/null
+++ b/tests/Integration/Services/Booking/Booking/Result/BookingItemResultAnnotationsTest.php
@@ -0,0 +1,136 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\Booking\Result;
+
+use Bitrix24\SDK\Services\Booking\Booking\Result\BookingItemResult;
+use Bitrix24\SDK\Services\Booking\Booking\Service\Booking;
+use Bitrix24\SDK\Tests\CustomAssertions\CustomBitrix24Assertions;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+use PHPUnit\Framework\Attributes\Depends;
+
+#[CoversClass(BookingItemResult::class)]
+#[CoversMethod(Booking::class, 'get')]
+#[CoversMethod(Booking::class, 'list')]
+class BookingItemResultAnnotationsTest extends BookingScopeTestCase
+{
+ use CustomBitrix24Assertions;
+
+ /**
+ * @var array
+ */
+ private const array BOOKING_FIELD_TYPES = [
+ 'id' => ['type' => 'int'],
+ 'name' => ['type' => 'string'],
+ 'description' => ['type' => 'string'],
+ 'datePeriod' => ['type' => 'array'],
+ 'resourceIds' => ['type' => 'array'],
+ ];
+
+ private Booking $bookingService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->bookingService = $this->serviceBuilder->getBookingScope()->booking();
+ }
+
+ /**
+ * @return array{get: string[], list: string[]}
+ */
+ public function testAllSystemFieldsAnnotated(): array
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $bookingId = $this->createBooking($resourceId);
+ $getFieldCodes = array_keys($this->getBookingPayloadFromGet($bookingId));
+ $listFieldCodes = array_keys($this->getBookingPayloadFromList($bookingId));
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $getFieldCodes,
+ BookingItemResult::class
+ );
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $listFieldCodes,
+ BookingItemResult::class
+ );
+
+ return [
+ 'get' => $getFieldCodes,
+ 'list' => $listFieldCodes,
+ ];
+ }
+
+ #[Depends('testAllSystemFieldsAnnotated')]
+ public function testAllSystemFieldsHasValidTypeAnnotation(array $fieldCodesByMethod): void
+ {
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodesByMethod['get']),
+ BookingItemResult::class
+ );
+
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodesByMethod['list']),
+ BookingItemResult::class
+ );
+ }
+
+ /**
+ * @return array
+ */
+ private function getBookingPayloadFromGet(int $bookingId): array
+ {
+ return $this->bookingService
+ ->get($bookingId)
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['booking'];
+ }
+
+ /**
+ * @return array
+ */
+ private function getBookingPayloadFromList(int $bookingId): array
+ {
+ $items = $this->bookingService
+ ->list(['id' => $bookingId], ['id' => 'desc'])
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['booking'];
+
+ foreach ($items as $item) {
+ if ((int)($item['id'] ?? 0) === $bookingId) {
+ return $item;
+ }
+ }
+
+ self::fail(sprintf('Booking %d was not found in booking.v1.booking.list response.', $bookingId));
+ }
+
+ /**
+ * @param string[] $fieldCodes
+ *
+ * @return array
+ */
+ private function mapFieldTypes(array $fieldCodes): array
+ {
+ $unknownFieldCodes = array_values(array_diff($fieldCodes, array_keys(self::BOOKING_FIELD_TYPES)));
+ self::assertSame([], $unknownFieldCodes, 'Add type mappings for new Booking fields before asserting annotations.');
+
+ return array_intersect_key(self::BOOKING_FIELD_TYPES, array_flip($fieldCodes));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/Booking/Service/BookingTest.php b/tests/Integration/Services/Booking/Booking/Service/BookingTest.php
new file mode 100644
index 00000000..d73ce52a
--- /dev/null
+++ b/tests/Integration/Services/Booking/Booking/Service/BookingTest.php
@@ -0,0 +1,91 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\Booking\Service;
+
+use Bitrix24\SDK\Services\Booking\Booking\Service\Booking;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+
+#[CoversClass(Booking::class)]
+#[CoversMethod(Booking::class, 'add')]
+#[CoversMethod(Booking::class, 'createFromWaitlist')]
+#[CoversMethod(Booking::class, 'get')]
+#[CoversMethod(Booking::class, 'list')]
+#[CoversMethod(Booking::class, 'update')]
+#[CoversMethod(Booking::class, 'delete')]
+class BookingTest extends BookingScopeTestCase
+{
+ private Booking $bookingService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->bookingService = $this->serviceBuilder->getBookingScope()->booking();
+ }
+
+ public function testAddGetListUpdateDelete(): void
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $bookingName = 'Booking name ' . $this->uniqueSuffix();
+ $bookingDescription = 'Booking description ' . $this->uniqueSuffix();
+ $bookingId = $this->createBooking($resourceId, [
+ 'name' => $bookingName,
+ 'description' => $bookingDescription,
+ ]);
+
+ self::assertGreaterThan(0, $bookingId);
+
+ $bookingItemResult = $this->bookingService->get($bookingId)->getBooking();
+ self::assertSame($bookingId, $bookingItemResult->id);
+ self::assertSame($bookingName, $bookingItemResult->name);
+ self::assertSame($bookingDescription, $bookingItemResult->description);
+ self::assertSame([$resourceId], $bookingItemResult->resourceIds);
+
+ $updatedName = 'Booking updated name ' . $this->uniqueSuffix();
+ $updatedDescription = 'Booking updated description ' . $this->uniqueSuffix();
+ self::assertTrue($this->bookingService->update($bookingId, [
+ 'name' => $updatedName,
+ 'description' => $updatedDescription,
+ ])->isSuccess());
+
+ $updatedBooking = $this->bookingService->get($bookingId)->getBooking();
+ self::assertSame($updatedName, $updatedBooking->name);
+ self::assertSame($updatedDescription, $updatedBooking->description);
+
+ $listedBooking = $this->findItemById($this->bookingService->list(['id' => $bookingId], ['id' => 'desc'])->getBookings(), $bookingId);
+ self::assertNotNull($listedBooking);
+ self::assertSame($updatedName, $listedBooking->name);
+
+ self::assertTrue($this->bookingService->delete($bookingId)->isSuccess());
+ }
+
+ public function testCreateFromWaitlist(): void
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $waitlistId = $this->createWaitlist();
+
+ $bookingId = $this->bookingService->createFromWaitlist($waitlistId, [
+ 'resourceIds' => [$resourceId],
+ 'datePeriod' => $this->buildDatePeriod(),
+ ])->getId();
+ $this->createdBookingIds[] = $bookingId;
+
+ self::assertGreaterThan(0, $bookingId);
+ self::assertSame($bookingId, $this->bookingService->get($bookingId)->getBooking()->id);
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/BookingClient/Result/BookingClientItemResultAnnotationsTest.php b/tests/Integration/Services/Booking/BookingClient/Result/BookingClientItemResultAnnotationsTest.php
new file mode 100644
index 00000000..36b1a504
--- /dev/null
+++ b/tests/Integration/Services/Booking/BookingClient/Result/BookingClientItemResultAnnotationsTest.php
@@ -0,0 +1,125 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\BookingClient\Result;
+
+use Bitrix24\SDK\Services\Booking\BookingClient\Result\BookingClientItemResult;
+use Bitrix24\SDK\Services\Booking\BookingClient\Service\BookingClient;
+use Bitrix24\SDK\Tests\CustomAssertions\CustomBitrix24Assertions;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+use PHPUnit\Framework\Attributes\Depends;
+
+#[CoversClass(BookingClientItemResult::class)]
+#[CoversMethod(BookingClient::class, 'list')]
+class BookingClientItemResultAnnotationsTest extends BookingScopeTestCase
+{
+ use CustomBitrix24Assertions;
+
+ /**
+ * @var array
+ */
+ private const array BOOKING_CLIENT_FIELD_TYPES = [
+ 'id' => ['type' => 'int'],
+ 'type' => ['type' => 'array'],
+ ];
+
+ private BookingClient $bookingClientService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->bookingClientService = $this->serviceBuilder->getBookingScope()->bookingClient();
+ }
+
+ /**
+ * @return string[]
+ */
+ public function testAllSystemFieldsAnnotated(): array
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $bookingId = $this->createBooking($resourceId);
+ $contactId = $this->createCrmContact();
+ $fieldCodes = array_keys($this->getBookingClientPayload($bookingId, $contactId));
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $fieldCodes,
+ BookingClientItemResult::class
+ );
+
+ return $fieldCodes;
+ }
+
+ #[Depends('testAllSystemFieldsAnnotated')]
+ public function testAllSystemFieldsHasValidTypeAnnotation(array $fieldCodes): void
+ {
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodes),
+ BookingClientItemResult::class
+ );
+ }
+
+ /**
+ * @return array
+ */
+ private function getBookingClientPayload(int $bookingId, int $contactId): array
+ {
+ $this->ensureContactClientTypeIsAvailable();
+
+ self::assertTrue($this->bookingClientService->set($bookingId, [[
+ 'id' => $contactId,
+ 'type' => [
+ 'module' => 'crm',
+ 'code' => 'CONTACT',
+ ],
+ ]])->isSuccess());
+
+ $items = $this->bookingClientService
+ ->list($bookingId)
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['bookingClient'];
+
+ self::assertNotSame([], $items, 'booking.v1.booking.client.list returned no clients after set().');
+
+ return $items[0];
+ }
+
+ private function ensureContactClientTypeIsAvailable(): void
+ {
+ $clientTypeCodes = array_map(
+ static fn(object $clientType): ?string => $clientType->code,
+ $this->serviceBuilder->getBookingScope()->clientType()->list()->getClientTypes()
+ );
+
+ if (!in_array('CONTACT', $clientTypeCodes, true)) {
+ self::markTestSkipped('Portal has no CONTACT booking client type configured.');
+ }
+ }
+
+ /**
+ * @param string[] $fieldCodes
+ *
+ * @return array
+ */
+ private function mapFieldTypes(array $fieldCodes): array
+ {
+ $unknownFieldCodes = array_values(array_diff($fieldCodes, array_keys(self::BOOKING_CLIENT_FIELD_TYPES)));
+ self::assertSame([], $unknownFieldCodes, 'Add type mappings for new BookingClient fields before asserting annotations.');
+
+ return array_intersect_key(self::BOOKING_CLIENT_FIELD_TYPES, array_flip($fieldCodes));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/BookingClient/Service/BookingClientTest.php b/tests/Integration/Services/Booking/BookingClient/Service/BookingClientTest.php
new file mode 100644
index 00000000..622fddc4
--- /dev/null
+++ b/tests/Integration/Services/Booking/BookingClient/Service/BookingClientTest.php
@@ -0,0 +1,69 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\BookingClient\Service;
+
+use Bitrix24\SDK\Services\Booking\BookingClient\Service\BookingClient;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+
+#[CoversClass(BookingClient::class)]
+#[CoversMethod(BookingClient::class, 'list')]
+#[CoversMethod(BookingClient::class, 'set')]
+#[CoversMethod(BookingClient::class, 'unset')]
+class BookingClientTest extends BookingScopeTestCase
+{
+ private BookingClient $bookingClientService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->bookingClientService = $this->serviceBuilder->getBookingScope()->bookingClient();
+ }
+
+ public function testSetListUnset(): void
+ {
+ $clientTypeCodes = array_map(
+ static fn(object $clientType): ?string => $clientType->code,
+ $this->serviceBuilder->getBookingScope()->clientType()->list()->getClientTypes()
+ );
+
+ if (!in_array('CONTACT', $clientTypeCodes, true)) {
+ self::markTestSkipped('Portal has no CONTACT booking client type configured.');
+ }
+
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $bookingId = $this->createBooking($resourceId);
+ $contactId = $this->createCrmContact();
+
+ self::assertTrue($this->bookingClientService->set($bookingId, [[
+ 'id' => $contactId,
+ 'type' => [
+ 'module' => 'crm',
+ 'code' => 'CONTACT',
+ ],
+ ]])->isSuccess());
+
+ $clients = $this->bookingClientService->list($bookingId)->getClients();
+ self::assertCount(1, $clients);
+ self::assertSame($contactId, $clients[0]->id);
+ self::assertSame('crm', $clients[0]->type['module']);
+ self::assertSame('CONTACT', $clients[0]->type['code']);
+
+ self::assertTrue($this->bookingClientService->unset($bookingId)->isSuccess());
+ self::assertCount(0, $this->bookingClientService->list($bookingId)->getClients());
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/BookingExternalData/Result/BookingExternalDataItemResultAnnotationsTest.php b/tests/Integration/Services/Booking/BookingExternalData/Result/BookingExternalDataItemResultAnnotationsTest.php
new file mode 100644
index 00000000..cc91e78a
--- /dev/null
+++ b/tests/Integration/Services/Booking/BookingExternalData/Result/BookingExternalDataItemResultAnnotationsTest.php
@@ -0,0 +1,110 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\BookingExternalData\Result;
+
+use Bitrix24\SDK\Services\Booking\BookingExternalData\Result\BookingExternalDataItemResult;
+use Bitrix24\SDK\Services\Booking\BookingExternalData\Service\BookingExternalData;
+use Bitrix24\SDK\Tests\CustomAssertions\CustomBitrix24Assertions;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+use PHPUnit\Framework\Attributes\Depends;
+
+#[CoversClass(BookingExternalDataItemResult::class)]
+#[CoversMethod(BookingExternalData::class, 'list')]
+class BookingExternalDataItemResultAnnotationsTest extends BookingScopeTestCase
+{
+ use CustomBitrix24Assertions;
+
+ /**
+ * @var array
+ */
+ private const array BOOKING_EXTERNAL_DATA_FIELD_TYPES = [
+ 'moduleId' => ['type' => 'string'],
+ 'entityTypeId' => ['type' => 'string'],
+ 'value' => ['type' => 'string'],
+ ];
+
+ private BookingExternalData $bookingExternalDataService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->bookingExternalDataService = $this->serviceBuilder->getBookingScope()->bookingExternalData();
+ }
+
+ /**
+ * @return string[]
+ */
+ public function testAllSystemFieldsAnnotated(): array
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $bookingId = $this->createBooking($resourceId);
+ $dealId = $this->createCrmDeal();
+ $fieldCodes = array_keys($this->getBookingExternalDataPayload($bookingId, $dealId));
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $fieldCodes,
+ BookingExternalDataItemResult::class
+ );
+
+ return $fieldCodes;
+ }
+
+ #[Depends('testAllSystemFieldsAnnotated')]
+ public function testAllSystemFieldsHasValidTypeAnnotation(array $fieldCodes): void
+ {
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodes),
+ BookingExternalDataItemResult::class
+ );
+ }
+
+ /**
+ * @return array
+ */
+ private function getBookingExternalDataPayload(int $bookingId, int $dealId): array
+ {
+ self::assertTrue($this->bookingExternalDataService->set($bookingId, [[
+ 'moduleId' => 'crm',
+ 'entityTypeId' => 'DEAL',
+ 'value' => (string)$dealId,
+ ]])->isSuccess());
+
+ $items = $this->bookingExternalDataService
+ ->list($bookingId)
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['externalData'];
+
+ self::assertNotSame([], $items, 'booking.v1.booking.externalData.list returned no external data after set().');
+
+ return $items[0];
+ }
+
+ /**
+ * @param string[] $fieldCodes
+ *
+ * @return array
+ */
+ private function mapFieldTypes(array $fieldCodes): array
+ {
+ $unknownFieldCodes = array_values(array_diff($fieldCodes, array_keys(self::BOOKING_EXTERNAL_DATA_FIELD_TYPES)));
+ self::assertSame([], $unknownFieldCodes, 'Add type mappings for new BookingExternalData fields before asserting annotations.');
+
+ return array_intersect_key(self::BOOKING_EXTERNAL_DATA_FIELD_TYPES, array_flip($fieldCodes));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/BookingExternalData/Service/BookingExternalDataTest.php b/tests/Integration/Services/Booking/BookingExternalData/Service/BookingExternalDataTest.php
new file mode 100644
index 00000000..290f9c40
--- /dev/null
+++ b/tests/Integration/Services/Booking/BookingExternalData/Service/BookingExternalDataTest.php
@@ -0,0 +1,58 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\BookingExternalData\Service;
+
+use Bitrix24\SDK\Services\Booking\BookingExternalData\Service\BookingExternalData;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+
+#[CoversClass(BookingExternalData::class)]
+#[CoversMethod(BookingExternalData::class, 'list')]
+#[CoversMethod(BookingExternalData::class, 'set')]
+#[CoversMethod(BookingExternalData::class, 'unset')]
+class BookingExternalDataTest extends BookingScopeTestCase
+{
+ private BookingExternalData $bookingExternalDataService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->bookingExternalDataService = $this->serviceBuilder->getBookingScope()->bookingExternalData();
+ }
+
+ public function testSetListUnset(): void
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $bookingId = $this->createBooking($resourceId);
+ $dealId = $this->createCrmDeal();
+
+ self::assertTrue($this->bookingExternalDataService->set($bookingId, [[
+ 'moduleId' => 'crm',
+ 'entityTypeId' => 'DEAL',
+ 'value' => (string)$dealId,
+ ]])->isSuccess());
+
+ $externalData = $this->bookingExternalDataService->list($bookingId)->getExternalData();
+ self::assertCount(1, $externalData);
+ self::assertSame('crm', $externalData[0]->moduleId);
+ self::assertSame('DEAL', $externalData[0]->entityTypeId);
+ self::assertSame((string)$dealId, $externalData[0]->value);
+
+ self::assertTrue($this->bookingExternalDataService->unset($bookingId)->isSuccess());
+ self::assertCount(0, $this->bookingExternalDataService->list($bookingId)->getExternalData());
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/ClientType/Result/ClientTypeItemResultAnnotationsTest.php b/tests/Integration/Services/Booking/ClientType/Result/ClientTypeItemResultAnnotationsTest.php
new file mode 100644
index 00000000..991d5a17
--- /dev/null
+++ b/tests/Integration/Services/Booking/ClientType/Result/ClientTypeItemResultAnnotationsTest.php
@@ -0,0 +1,101 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\ClientType\Result;
+
+use Bitrix24\SDK\Services\Booking\ClientType\Result\ClientTypeItemResult;
+use Bitrix24\SDK\Services\Booking\ClientType\Service\ClientType;
+use Bitrix24\SDK\Tests\CustomAssertions\CustomBitrix24Assertions;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+use PHPUnit\Framework\Attributes\Depends;
+
+#[CoversClass(ClientTypeItemResult::class)]
+#[CoversMethod(ClientType::class, 'list')]
+class ClientTypeItemResultAnnotationsTest extends BookingScopeTestCase
+{
+ use CustomBitrix24Assertions;
+
+ /**
+ * @var array
+ */
+ private const array CLIENT_TYPE_FIELD_TYPES = [
+ 'code' => ['type' => 'string'],
+ 'module' => ['type' => 'string'],
+ ];
+
+ private ClientType $clientTypeService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->clientTypeService = $this->serviceBuilder->getBookingScope()->clientType();
+ }
+
+ /**
+ * @return string[]
+ */
+ public function testAllSystemFieldsAnnotated(): array
+ {
+ $fieldCodes = array_keys($this->getClientTypePayload());
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $fieldCodes,
+ ClientTypeItemResult::class
+ );
+
+ return $fieldCodes;
+ }
+
+ #[Depends('testAllSystemFieldsAnnotated')]
+ public function testAllSystemFieldsHasValidTypeAnnotation(array $fieldCodes): void
+ {
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodes),
+ ClientTypeItemResult::class
+ );
+ }
+
+ /**
+ * @return array
+ */
+ private function getClientTypePayload(): array
+ {
+ $items = $this->clientTypeService
+ ->list()
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['clientType'];
+
+ if ($items === []) {
+ self::markTestSkipped('Portal has no booking client types configured.');
+ }
+
+ return $items[0];
+ }
+
+ /**
+ * @param string[] $fieldCodes
+ *
+ * @return array
+ */
+ private function mapFieldTypes(array $fieldCodes): array
+ {
+ $unknownFieldCodes = array_values(array_diff($fieldCodes, array_keys(self::CLIENT_TYPE_FIELD_TYPES)));
+ self::assertSame([], $unknownFieldCodes, 'Add type mappings for new ClientType fields before asserting annotations.');
+
+ return array_intersect_key(self::CLIENT_TYPE_FIELD_TYPES, array_flip($fieldCodes));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/ClientType/Service/ClientTypeTest.php b/tests/Integration/Services/Booking/ClientType/Service/ClientTypeTest.php
new file mode 100644
index 00000000..131b7278
--- /dev/null
+++ b/tests/Integration/Services/Booking/ClientType/Service/ClientTypeTest.php
@@ -0,0 +1,45 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\ClientType\Service;
+
+use Bitrix24\SDK\Services\Booking\ClientType\Service\ClientType;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+
+#[CoversClass(ClientType::class)]
+#[CoversMethod(ClientType::class, 'list')]
+class ClientTypeTest extends BookingScopeTestCase
+{
+ private ClientType $clientTypeService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->clientTypeService = $this->serviceBuilder->getBookingScope()->clientType();
+ }
+
+ public function testList(): void
+ {
+ $clientTypes = $this->clientTypeService->list()->getClientTypes();
+
+ self::assertIsArray($clientTypes);
+
+ foreach ($clientTypes as $clientType) {
+ self::assertNotEmpty($clientType->code);
+ self::assertSame('crm', $clientType->module);
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/Resource/Result/ResourceItemResultAnnotationsTest.php b/tests/Integration/Services/Booking/Resource/Result/ResourceItemResultAnnotationsTest.php
new file mode 100644
index 00000000..c71729ce
--- /dev/null
+++ b/tests/Integration/Services/Booking/Resource/Result/ResourceItemResultAnnotationsTest.php
@@ -0,0 +1,156 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\Resource\Result;
+
+use Bitrix24\SDK\Services\Booking\Resource\Result\ResourceItemResult;
+use Bitrix24\SDK\Services\Booking\Resource\Service\Resource;
+use Bitrix24\SDK\Tests\CustomAssertions\CustomBitrix24Assertions;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+use PHPUnit\Framework\Attributes\Depends;
+
+#[CoversClass(ResourceItemResult::class)]
+#[CoversMethod(Resource::class, 'get')]
+#[CoversMethod(Resource::class, 'list')]
+class ResourceItemResultAnnotationsTest extends BookingScopeTestCase
+{
+ use CustomBitrix24Assertions;
+
+ /**
+ * @var array
+ */
+ private const array RESOURCE_FIELD_TYPES = [
+ 'id' => ['type' => 'int'],
+ 'name' => ['type' => 'string'],
+ 'description' => ['type' => 'string'],
+ 'typeId' => ['type' => 'int'],
+ 'isMain' => ['type' => 'string'],
+ 'isCancellationNotificationOn' => ['type' => 'string'],
+ 'isInfoNotificationOn' => ['type' => 'string'],
+ 'templateTypeInfo' => ['type' => 'string'],
+ 'isConfirmationNotificationOn' => ['type' => 'string'],
+ 'templateTypeConfirmation' => ['type' => 'string'],
+ 'isReminderNotificationOn' => ['type' => 'string'],
+ 'templateTypeReminder' => ['type' => 'string'],
+ 'isFeedbackNotificationOn' => ['type' => 'string'],
+ 'templateTypeFeedback' => ['type' => 'string'],
+ 'isDelayedNotificationOn' => ['type' => 'string'],
+ 'templateTypeDelayed' => ['type' => 'string'],
+ 'senderCode' => ['type' => 'string'],
+ 'cancellationNotificationDelay' => ['type' => 'int'],
+ 'infoNotificationDelay' => ['type' => 'int'],
+ 'reminderNotificationDelay' => ['type' => 'int'],
+ 'delayedNotificationDelay' => ['type' => 'int'],
+ 'delayedCounterDelay' => ['type' => 'int'],
+ 'confirmationNotificationDelay' => ['type' => 'int'],
+ 'confirmationNotificationRepetitions' => ['type' => 'int'],
+ 'confirmationNotificationRepetitionsInterval' => ['type' => 'int'],
+ 'confirmationCounterDelay' => ['type' => 'int'],
+ ];
+
+ private Resource $resourceService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->resourceService = $this->serviceBuilder->getBookingScope()->resource();
+ }
+
+ /**
+ * @return array{get: string[], list: string[]}
+ */
+ public function testAllSystemFieldsAnnotated(): array
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $getFieldCodes = array_keys($this->getResourcePayloadFromGet($resourceId));
+ $listFieldCodes = array_keys($this->getResourcePayloadFromList($resourceId));
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $getFieldCodes,
+ ResourceItemResult::class
+ );
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $listFieldCodes,
+ ResourceItemResult::class
+ );
+
+ return [
+ 'get' => $getFieldCodes,
+ 'list' => $listFieldCodes,
+ ];
+ }
+
+ #[Depends('testAllSystemFieldsAnnotated')]
+ public function testAllSystemFieldsHasValidTypeAnnotation(array $fieldCodesByMethod): void
+ {
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodesByMethod['get']),
+ ResourceItemResult::class
+ );
+
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodesByMethod['list']),
+ ResourceItemResult::class
+ );
+ }
+
+ /**
+ * @return array
+ */
+ private function getResourcePayloadFromGet(int $resourceId): array
+ {
+ return $this->resourceService
+ ->get($resourceId)
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['resource'];
+ }
+
+ /**
+ * @return array
+ */
+ private function getResourcePayloadFromList(int $resourceId): array
+ {
+ $items = $this->resourceService
+ ->list(['id' => $resourceId], ['id' => 'desc'])
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['resource'];
+
+ foreach ($items as $item) {
+ if ((int)($item['id'] ?? 0) === $resourceId) {
+ return $item;
+ }
+ }
+
+ self::fail(sprintf('Resource %d was not found in booking.v1.resource.list response.', $resourceId));
+ }
+
+ /**
+ * @param string[] $fieldCodes
+ *
+ * @return array
+ */
+ private function mapFieldTypes(array $fieldCodes): array
+ {
+ $unknownFieldCodes = array_values(array_diff($fieldCodes, array_keys(self::RESOURCE_FIELD_TYPES)));
+ self::assertSame([], $unknownFieldCodes, 'Add type mappings for new Booking resource fields before asserting annotations.');
+
+ return array_intersect_key(self::RESOURCE_FIELD_TYPES, array_flip($fieldCodes));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/Resource/Service/ResourceTest.php b/tests/Integration/Services/Booking/Resource/Service/ResourceTest.php
new file mode 100644
index 00000000..49203fab
--- /dev/null
+++ b/tests/Integration/Services/Booking/Resource/Service/ResourceTest.php
@@ -0,0 +1,67 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\Resource\Service;
+
+use Bitrix24\SDK\Services\Booking\Resource\Service\Resource;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+
+#[CoversClass(Resource::class)]
+#[CoversMethod(Resource::class, 'add')]
+#[CoversMethod(Resource::class, 'get')]
+#[CoversMethod(Resource::class, 'list')]
+#[CoversMethod(Resource::class, 'update')]
+#[CoversMethod(Resource::class, 'delete')]
+class ResourceTest extends BookingScopeTestCase
+{
+ private Resource $resourceService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->resourceService = $this->serviceBuilder->getBookingScope()->resource();
+ }
+
+ public function testAddGetListUpdateDelete(): void
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+
+ self::assertGreaterThan(0, $resourceId);
+
+ $resourceItemResult = $this->resourceService->get($resourceId)->getResource();
+ self::assertSame($resourceId, $resourceItemResult->id);
+ self::assertSame($resourceTypeId, $resourceItemResult->typeId);
+ self::assertNotEmpty($resourceItemResult->name);
+
+ $updatedName = 'Booking Resource Updated ' . $this->uniqueSuffix();
+ $updatedDescription = 'Booking resource updated description ' . $this->uniqueSuffix();
+ self::assertTrue($this->resourceService->update($resourceId, [
+ 'name' => $updatedName,
+ 'description' => $updatedDescription,
+ ])->isSuccess());
+
+ $updatedResource = $this->resourceService->get($resourceId)->getResource();
+ self::assertSame($updatedName, $updatedResource->name);
+ self::assertSame($updatedDescription, $updatedResource->description);
+
+ $listedResource = $this->findItemById($this->resourceService->list(['id' => $resourceId], ['id' => 'desc'])->getResources(), $resourceId);
+ self::assertNotNull($listedResource);
+ self::assertSame($updatedName, $listedResource->name);
+
+ self::assertTrue($this->resourceService->delete($resourceId)->isSuccess());
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/ResourceSlots/Result/ResourceSlotItemResultAnnotationsTest.php b/tests/Integration/Services/Booking/ResourceSlots/Result/ResourceSlotItemResultAnnotationsTest.php
new file mode 100644
index 00000000..7aa68692
--- /dev/null
+++ b/tests/Integration/Services/Booking/ResourceSlots/Result/ResourceSlotItemResultAnnotationsTest.php
@@ -0,0 +1,113 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\ResourceSlots\Result;
+
+use Bitrix24\SDK\Services\Booking\ResourceSlots\Result\ResourceSlotItemResult;
+use Bitrix24\SDK\Services\Booking\ResourceSlots\Service\ResourceSlots;
+use Bitrix24\SDK\Tests\CustomAssertions\CustomBitrix24Assertions;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+use PHPUnit\Framework\Attributes\Depends;
+
+#[CoversClass(ResourceSlotItemResult::class)]
+#[CoversMethod(ResourceSlots::class, 'list')]
+class ResourceSlotItemResultAnnotationsTest extends BookingScopeTestCase
+{
+ use CustomBitrix24Assertions;
+
+ /**
+ * @var array
+ */
+ private const array RESOURCE_SLOT_FIELD_TYPES = [
+ 'id' => ['type' => 'int'],
+ 'from' => ['type' => 'int'],
+ 'to' => ['type' => 'int'],
+ 'timezone' => ['type' => 'string'],
+ 'weekDays' => ['type' => 'array'],
+ 'slotSize' => ['type' => 'int'],
+ ];
+
+ private ResourceSlots $resourceSlotsService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->resourceSlotsService = $this->serviceBuilder->getBookingScope()->resourceSlots();
+ }
+
+ /**
+ * @return string[]
+ */
+ public function testAllSystemFieldsAnnotated(): array
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $fieldCodes = array_keys($this->getResourceSlotPayload($resourceId));
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $fieldCodes,
+ ResourceSlotItemResult::class
+ );
+
+ return $fieldCodes;
+ }
+
+ #[Depends('testAllSystemFieldsAnnotated')]
+ public function testAllSystemFieldsHasValidTypeAnnotation(array $fieldCodes): void
+ {
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodes),
+ ResourceSlotItemResult::class
+ );
+ }
+
+ /**
+ * @return array
+ */
+ private function getResourceSlotPayload(int $resourceId): array
+ {
+ self::assertTrue($this->resourceSlotsService->set($resourceId, [[
+ 'from' => 540,
+ 'to' => 1080,
+ 'timezone' => 'Europe/Berlin',
+ 'weekDays' => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'],
+ 'slotSize' => 30,
+ ]])->isSuccess());
+
+ $items = $this->resourceSlotsService
+ ->list($resourceId)
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['slots'];
+
+ self::assertNotSame([], $items, 'booking.v1.resource.slots.list returned no slots after set().');
+
+ return $items[0];
+ }
+
+ /**
+ * @param string[] $fieldCodes
+ *
+ * @return array
+ */
+ private function mapFieldTypes(array $fieldCodes): array
+ {
+ $unknownFieldCodes = array_values(array_diff($fieldCodes, array_keys(self::RESOURCE_SLOT_FIELD_TYPES)));
+ self::assertSame([], $unknownFieldCodes, 'Add type mappings for new ResourceSlot fields before asserting annotations.');
+
+ return array_intersect_key(self::RESOURCE_SLOT_FIELD_TYPES, array_flip($fieldCodes));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/ResourceSlots/Service/ResourceSlotsTest.php b/tests/Integration/Services/Booking/ResourceSlots/Service/ResourceSlotsTest.php
new file mode 100644
index 00000000..7a8f8cc6
--- /dev/null
+++ b/tests/Integration/Services/Booking/ResourceSlots/Service/ResourceSlotsTest.php
@@ -0,0 +1,63 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\ResourceSlots\Service;
+
+use Bitrix24\SDK\Services\Booking\ResourceSlots\Service\ResourceSlots;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+
+#[CoversClass(ResourceSlots::class)]
+#[CoversMethod(ResourceSlots::class, 'set')]
+#[CoversMethod(ResourceSlots::class, 'list')]
+#[CoversMethod(ResourceSlots::class, 'unset')]
+class ResourceSlotsTest extends BookingScopeTestCase
+{
+ private ResourceSlots $resourceSlotsService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->resourceSlotsService = $this->serviceBuilder->getBookingScope()->resourceSlots();
+ }
+
+ public function testSetListUnset(): void
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $slots = [[
+ 'from' => 540,
+ 'to' => 1080,
+ 'timezone' => 'Europe/Berlin',
+ 'weekDays' => ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'],
+ 'slotSize' => 30,
+ ]];
+
+ self::assertTrue($this->resourceSlotsService->set($resourceId, $slots)->isSuccess());
+
+ $resourceSlots = $this->resourceSlotsService->list($resourceId)->getSlots();
+ self::assertNotEmpty($resourceSlots);
+ self::assertSame(540, $resourceSlots[0]->from);
+ self::assertSame(1080, $resourceSlots[0]->to);
+ self::assertSame('Europe/Berlin', $resourceSlots[0]->timezone);
+ self::assertSame(30, $resourceSlots[0]->slotSize);
+ self::assertContains('Mon', $resourceSlots[0]->weekDays);
+ self::assertContains('Fri', $resourceSlots[0]->weekDays);
+
+ self::assertTrue($this->resourceSlotsService->unset($resourceId)->isSuccess());
+
+ self::assertCount(0, $this->resourceSlotsService->list($resourceId)->getSlots());
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/ResourceType/Result/ResourceTypeItemResultAnnotationsTest.php b/tests/Integration/Services/Booking/ResourceType/Result/ResourceTypeItemResultAnnotationsTest.php
new file mode 100644
index 00000000..ac22a9ee
--- /dev/null
+++ b/tests/Integration/Services/Booking/ResourceType/Result/ResourceTypeItemResultAnnotationsTest.php
@@ -0,0 +1,152 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\ResourceType\Result;
+
+use Bitrix24\SDK\Services\Booking\ResourceType\Result\ResourceTypeItemResult;
+use Bitrix24\SDK\Services\Booking\ResourceType\Service\ResourceType;
+use Bitrix24\SDK\Tests\CustomAssertions\CustomBitrix24Assertions;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+use PHPUnit\Framework\Attributes\Depends;
+
+#[CoversClass(ResourceTypeItemResult::class)]
+#[CoversMethod(ResourceType::class, 'get')]
+#[CoversMethod(ResourceType::class, 'list')]
+class ResourceTypeItemResultAnnotationsTest extends BookingScopeTestCase
+{
+ use CustomBitrix24Assertions;
+
+ /**
+ * @var array
+ */
+ private const array RESOURCE_TYPE_FIELD_TYPES = [
+ 'id' => ['type' => 'int'],
+ 'code' => ['type' => 'string'],
+ 'name' => ['type' => 'string'],
+ 'cancellationNotificationDelay' => ['type' => 'int'],
+ 'confirmationCounterDelay' => ['type' => 'int'],
+ 'confirmationNotificationDelay' => ['type' => 'int'],
+ 'confirmationNotificationRepetitions' => ['type' => 'int'],
+ 'confirmationNotificationRepetitionsInterval' => ['type' => 'int'],
+ 'delayedCounterDelay' => ['type' => 'int'],
+ 'delayedNotificationDelay' => ['type' => 'int'],
+ 'infoNotificationDelay' => ['type' => 'int'],
+ 'isCancellationNotificationOn' => ['type' => 'string'],
+ 'isConfirmationNotificationOn' => ['type' => 'string'],
+ 'isDelayedNotificationOn' => ['type' => 'string'],
+ 'isFeedbackNotificationOn' => ['type' => 'string'],
+ 'isInfoNotificationOn' => ['type' => 'string'],
+ 'isReminderNotificationOn' => ['type' => 'string'],
+ 'reminderNotificationDelay' => ['type' => 'int'],
+ 'senderCode' => ['type' => 'string'],
+ 'templateTypeConfirmation' => ['type' => 'string'],
+ 'templateTypeDelayed' => ['type' => 'string'],
+ 'templateTypeFeedback' => ['type' => 'string'],
+ 'templateTypeReminder' => ['type' => 'string'],
+ ];
+
+ private ResourceType $resourceTypeService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->resourceTypeService = $this->serviceBuilder->getBookingScope()->resourceType();
+ }
+
+ /**
+ * @return array{get: string[], list: string[]}
+ */
+ public function testAllSystemFieldsAnnotated(): array
+ {
+ $resourceTypeId = $this->createResourceType();
+ $getFieldCodes = array_keys($this->getResourceTypePayloadFromGet($resourceTypeId));
+ $listFieldCodes = array_keys($this->getResourceTypePayloadFromList($resourceTypeId));
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $getFieldCodes,
+ ResourceTypeItemResult::class
+ );
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $listFieldCodes,
+ ResourceTypeItemResult::class
+ );
+
+ return [
+ 'get' => $getFieldCodes,
+ 'list' => $listFieldCodes,
+ ];
+ }
+
+ #[Depends('testAllSystemFieldsAnnotated')]
+ public function testAllSystemFieldsHasValidTypeAnnotation(array $fieldCodesByMethod): void
+ {
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodesByMethod['get']),
+ ResourceTypeItemResult::class
+ );
+
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodesByMethod['list']),
+ ResourceTypeItemResult::class
+ );
+ }
+
+ /**
+ * @return array
+ */
+ private function getResourceTypePayloadFromGet(int $resourceTypeId): array
+ {
+ return $this->resourceTypeService
+ ->get($resourceTypeId)
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['resourceType'];
+ }
+
+ /**
+ * @return array
+ */
+ private function getResourceTypePayloadFromList(int $resourceTypeId): array
+ {
+ $items = $this->resourceTypeService
+ ->list(['id' => $resourceTypeId], ['id' => 'desc'])
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['resourceType'];
+
+ foreach ($items as $item) {
+ if ((int)($item['id'] ?? 0) === $resourceTypeId) {
+ return $item;
+ }
+ }
+
+ self::fail(sprintf('Resource type %d was not found in booking.v1.resourceType.list response.', $resourceTypeId));
+ }
+
+ /**
+ * @param string[] $fieldCodes
+ *
+ * @return array
+ */
+ private function mapFieldTypes(array $fieldCodes): array
+ {
+ $unknownFieldCodes = array_values(array_diff($fieldCodes, array_keys(self::RESOURCE_TYPE_FIELD_TYPES)));
+ self::assertSame([], $unknownFieldCodes, 'Add type mappings for new Booking resource type fields before asserting annotations.');
+
+ return array_intersect_key(self::RESOURCE_TYPE_FIELD_TYPES, array_flip($fieldCodes));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/ResourceType/Service/ResourceTypeTest.php b/tests/Integration/Services/Booking/ResourceType/Service/ResourceTypeTest.php
new file mode 100644
index 00000000..2c0d4f47
--- /dev/null
+++ b/tests/Integration/Services/Booking/ResourceType/Service/ResourceTypeTest.php
@@ -0,0 +1,69 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\ResourceType\Service;
+
+use Bitrix24\SDK\Services\Booking\ResourceType\Service\ResourceType;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+
+#[CoversClass(ResourceType::class)]
+#[CoversMethod(ResourceType::class, 'add')]
+#[CoversMethod(ResourceType::class, 'get')]
+#[CoversMethod(ResourceType::class, 'list')]
+#[CoversMethod(ResourceType::class, 'update')]
+#[CoversMethod(ResourceType::class, 'delete')]
+class ResourceTypeTest extends BookingScopeTestCase
+{
+ private ResourceType $resourceTypeService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->resourceTypeService = $this->serviceBuilder->getBookingScope()->resourceType();
+ }
+
+ public function testAddGetListUpdateDelete(): void
+ {
+ $resourceTypeId = $this->createResourceType();
+
+ self::assertGreaterThan(0, $resourceTypeId);
+
+ $resourceTypeItemResult = $this->resourceTypeService->get($resourceTypeId)->getResourceType();
+ self::assertSame($resourceTypeId, $resourceTypeItemResult->id);
+ self::assertNotEmpty($resourceTypeItemResult->code);
+ self::assertNotEmpty($resourceTypeItemResult->name);
+
+ $updatedCode = 'b24phpsdk-' . $this->uniqueSuffix();
+ $updatedName = 'Booking Resource Type Updated ' . $this->uniqueSuffix();
+ self::assertTrue($this->resourceTypeService->update($resourceTypeId, [
+ 'code' => $updatedCode,
+ 'name' => $updatedName,
+ ])->isSuccess());
+
+ $updatedResourceType = $this->resourceTypeService->get($resourceTypeId)->getResourceType();
+ self::assertSame($updatedCode, $updatedResourceType->code);
+ self::assertSame($updatedName, $updatedResourceType->name);
+
+ $listedResourceType = $this->findItemById(
+ $this->resourceTypeService->list(['id' => $resourceTypeId], ['id' => 'desc'])->getResourceTypes(),
+ $resourceTypeId
+ );
+ self::assertNotNull($listedResourceType);
+ self::assertSame($updatedName, $listedResourceType->name);
+
+ self::assertTrue($this->resourceTypeService->delete($resourceTypeId)->isSuccess());
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/Support/BookingScopeTestCase.php b/tests/Integration/Services/Booking/Support/BookingScopeTestCase.php
new file mode 100644
index 00000000..9162ab78
--- /dev/null
+++ b/tests/Integration/Services/Booking/Support/BookingScopeTestCase.php
@@ -0,0 +1,229 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\Support;
+
+use Bitrix24\SDK\Services\ServiceBuilder;
+use Bitrix24\SDK\Tests\Integration\Fabric;
+use PHPUnit\Framework\TestCase;
+
+abstract class BookingScopeTestCase extends TestCase
+{
+ protected ServiceBuilder $serviceBuilder;
+
+ /**
+ * @var int[]
+ */
+ protected array $createdBookingIds = [];
+
+ /**
+ * @var int[]
+ */
+ protected array $createdDealIds = [];
+
+ /**
+ * @var int[]
+ */
+ protected array $createdContactIds = [];
+
+ /**
+ * @var int[]
+ */
+ protected array $createdWaitlistIds = [];
+
+ /**
+ * @var int[]
+ */
+ protected array $createdResourceIds = [];
+
+ /**
+ * @var int[]
+ */
+ protected array $createdResourceTypeIds = [];
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ $this->serviceBuilder = Fabric::getServiceBuilder();
+ }
+
+ #[\Override]
+ protected function tearDown(): void
+ {
+ if (!isset($this->serviceBuilder)) {
+ return;
+ }
+
+ foreach (array_reverse(array_values(array_unique($this->createdBookingIds))) as $bookingId) {
+ try {
+ $this->serviceBuilder->getBookingScope()->booking()->delete($bookingId);
+ } catch (\Throwable) {
+ }
+ }
+
+ foreach (array_reverse(array_values(array_unique($this->createdWaitlistIds))) as $waitlistId) {
+ try {
+ $this->serviceBuilder->getBookingScope()->waitlist()->delete($waitlistId);
+ } catch (\Throwable) {
+ }
+ }
+
+ foreach (array_reverse(array_values(array_unique($this->createdDealIds))) as $dealId) {
+ try {
+ $this->serviceBuilder->getCRMScope()->deal()->delete($dealId);
+ } catch (\Throwable) {
+ }
+ }
+
+ foreach (array_reverse(array_values(array_unique($this->createdContactIds))) as $contactId) {
+ try {
+ $this->serviceBuilder->getCRMScope()->contact()->delete($contactId);
+ } catch (\Throwable) {
+ }
+ }
+
+ foreach (array_reverse(array_values(array_unique($this->createdResourceIds))) as $resourceId) {
+ try {
+ $this->serviceBuilder->getBookingScope()->resource()->delete($resourceId);
+ } catch (\Throwable) {
+ }
+ }
+
+ foreach (array_reverse(array_values(array_unique($this->createdResourceTypeIds))) as $resourceTypeId) {
+ for ($attempt = 0; $attempt < 3; $attempt++) {
+ try {
+ $this->serviceBuilder->getBookingScope()->resourceType()->delete($resourceTypeId);
+ break;
+ } catch (\Throwable) {
+ }
+ }
+ }
+ }
+
+ protected function createResourceType(array $fields = []): int
+ {
+ $suffix = $this->uniqueSuffix();
+ $resourceTypeId = $this->serviceBuilder->getBookingScope()->resourceType()->add(array_merge([
+ 'code' => 'b24phpsdk-' . $suffix,
+ 'name' => 'Booking Resource Type ' . $suffix,
+ ], $fields))->getId();
+
+ $this->createdResourceTypeIds[] = $resourceTypeId;
+
+ return $resourceTypeId;
+ }
+
+ protected function createResource(int $resourceTypeId, array $fields = []): int
+ {
+ $suffix = $this->uniqueSuffix();
+ $resourceId = $this->serviceBuilder->getBookingScope()->resource()->add(array_merge([
+ 'typeId' => $resourceTypeId,
+ 'name' => 'Booking Resource ' . $suffix,
+ 'description' => 'Booking resource ' . $suffix,
+ ], $fields))->getId();
+
+ $this->createdResourceIds[] = $resourceId;
+
+ return $resourceId;
+ }
+
+ protected function createWaitlist(array $fields = []): int
+ {
+ $suffix = $this->uniqueSuffix();
+ $waitlistId = $this->serviceBuilder->getBookingScope()->waitlist()->add(array_merge([
+ 'note' => 'Booking waitlist ' . $suffix,
+ ], $fields))->getId();
+
+ $this->createdWaitlistIds[] = $waitlistId;
+
+ return $waitlistId;
+ }
+
+ protected function createBooking(int $resourceId, array $fields = []): int
+ {
+ $suffix = $this->uniqueSuffix();
+ $bookingId = $this->serviceBuilder->getBookingScope()->booking()->add(array_merge([
+ 'name' => 'Booking ' . $suffix,
+ 'description' => 'Booking description ' . $suffix,
+ 'resourceIds' => [$resourceId],
+ 'datePeriod' => $this->buildDatePeriod(),
+ ], $fields))->getId();
+
+ $this->createdBookingIds[] = $bookingId;
+
+ return $bookingId;
+ }
+
+ protected function createCrmContact(): int
+ {
+ $suffix = $this->uniqueSuffix();
+ $contactId = $this->serviceBuilder->getCRMScope()->contact()->add([
+ 'NAME' => 'Booking contact ' . $suffix,
+ ])->getId();
+
+ $this->createdContactIds[] = $contactId;
+
+ return $contactId;
+ }
+
+ protected function createCrmDeal(): int
+ {
+ $suffix = $this->uniqueSuffix();
+ $dealId = $this->serviceBuilder->getCRMScope()->deal()->add([
+ 'TITLE' => 'Booking deal ' . $suffix,
+ ])->getId();
+
+ $this->createdDealIds[] = $dealId;
+
+ return $dealId;
+ }
+
+ /**
+ * @return array>
+ */
+ protected function buildDatePeriod(string $timezone = 'Europe/Berlin', int $startOffsetSeconds = 7200, int $durationSeconds = 1800): array
+ {
+ $fromTimestamp = time() + $startOffsetSeconds;
+ $toTimestamp = $fromTimestamp + $durationSeconds;
+
+ return [
+ 'from' => [
+ 'timestamp' => $fromTimestamp,
+ 'timezone' => $timezone,
+ ],
+ 'to' => [
+ 'timestamp' => $toTimestamp,
+ 'timezone' => $timezone,
+ ],
+ ];
+ }
+
+ /**
+ * @param object[] $items
+ */
+ protected function findItemById(array $items, int $id): ?object
+ {
+ foreach ($items as $item) {
+ if ((int)$item->id === $id) {
+ return $item;
+ }
+ }
+
+ return null;
+ }
+
+ protected function uniqueSuffix(): string
+ {
+ return str_replace('.', '', uniqid('', true));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/Waitlist/Result/WaitlistItemResultAnnotationsTest.php b/tests/Integration/Services/Booking/Waitlist/Result/WaitlistItemResultAnnotationsTest.php
new file mode 100644
index 00000000..a551d0e0
--- /dev/null
+++ b/tests/Integration/Services/Booking/Waitlist/Result/WaitlistItemResultAnnotationsTest.php
@@ -0,0 +1,131 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\Waitlist\Result;
+
+use Bitrix24\SDK\Services\Booking\Waitlist\Result\WaitlistItemResult;
+use Bitrix24\SDK\Services\Booking\Waitlist\Service\Waitlist;
+use Bitrix24\SDK\Tests\CustomAssertions\CustomBitrix24Assertions;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+use PHPUnit\Framework\Attributes\Depends;
+
+#[CoversClass(WaitlistItemResult::class)]
+#[CoversMethod(Waitlist::class, 'get')]
+#[CoversMethod(Waitlist::class, 'list')]
+class WaitlistItemResultAnnotationsTest extends BookingScopeTestCase
+{
+ use CustomBitrix24Assertions;
+
+ /**
+ * @var array
+ */
+ private const array WAITLIST_FIELD_TYPES = [
+ 'id' => ['type' => 'int'],
+ 'note' => ['type' => 'string'],
+ ];
+
+ private Waitlist $waitlistService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->waitlistService = $this->serviceBuilder->getBookingScope()->waitlist();
+ }
+
+ /**
+ * @return array{get: string[], list: string[]}
+ */
+ public function testAllSystemFieldsAnnotated(): array
+ {
+ $waitlistId = $this->createWaitlist();
+ $getFieldCodes = array_keys($this->getWaitlistPayloadFromGet($waitlistId));
+ $listFieldCodes = array_keys($this->getWaitlistPayloadFromList($waitlistId));
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $getFieldCodes,
+ WaitlistItemResult::class
+ );
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $listFieldCodes,
+ WaitlistItemResult::class
+ );
+
+ return [
+ 'get' => $getFieldCodes,
+ 'list' => $listFieldCodes,
+ ];
+ }
+
+ #[Depends('testAllSystemFieldsAnnotated')]
+ public function testAllSystemFieldsHasValidTypeAnnotation(array $fieldCodesByMethod): void
+ {
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodesByMethod['get']),
+ WaitlistItemResult::class
+ );
+
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodesByMethod['list']),
+ WaitlistItemResult::class
+ );
+ }
+
+ /**
+ * @return array
+ */
+ private function getWaitlistPayloadFromGet(int $waitlistId): array
+ {
+ return $this->waitlistService
+ ->get($waitlistId)
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['waitList'];
+ }
+
+ /**
+ * @return array
+ */
+ private function getWaitlistPayloadFromList(int $waitlistId): array
+ {
+ $items = $this->waitlistService
+ ->list(['id' => $waitlistId])
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['waitList'];
+
+ foreach ($items as $item) {
+ if ((int)($item['id'] ?? 0) === $waitlistId) {
+ return $item;
+ }
+ }
+
+ self::fail(sprintf('Waitlist entry %d was not found in booking.v1.waitlist.list response.', $waitlistId));
+ }
+
+ /**
+ * @param string[] $fieldCodes
+ *
+ * @return array
+ */
+ private function mapFieldTypes(array $fieldCodes): array
+ {
+ $unknownFieldCodes = array_values(array_diff($fieldCodes, array_keys(self::WAITLIST_FIELD_TYPES)));
+ self::assertSame([], $unknownFieldCodes, 'Add type mappings for new Booking waitlist fields before asserting annotations.');
+
+ return array_intersect_key(self::WAITLIST_FIELD_TYPES, array_flip($fieldCodes));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/Waitlist/Service/WaitlistTest.php b/tests/Integration/Services/Booking/Waitlist/Service/WaitlistTest.php
new file mode 100644
index 00000000..4247c098
--- /dev/null
+++ b/tests/Integration/Services/Booking/Waitlist/Service/WaitlistTest.php
@@ -0,0 +1,79 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\Waitlist\Service;
+
+use Bitrix24\SDK\Services\Booking\Waitlist\Service\Waitlist;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+
+#[CoversClass(Waitlist::class)]
+#[CoversMethod(Waitlist::class, 'add')]
+#[CoversMethod(Waitlist::class, 'createFromBooking')]
+#[CoversMethod(Waitlist::class, 'get')]
+#[CoversMethod(Waitlist::class, 'list')]
+#[CoversMethod(Waitlist::class, 'update')]
+#[CoversMethod(Waitlist::class, 'delete')]
+class WaitlistTest extends BookingScopeTestCase
+{
+ private Waitlist $waitlistService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->waitlistService = $this->serviceBuilder->getBookingScope()->waitlist();
+ }
+
+ public function testAddGetListUpdateDelete(): void
+ {
+ $note = 'Booking waitlist note ' . $this->uniqueSuffix();
+ $waitlistId = $this->createWaitlist([
+ 'note' => $note,
+ ]);
+
+ self::assertGreaterThan(0, $waitlistId);
+
+ $waitlistItemResult = $this->waitlistService->get($waitlistId)->getWaitlist();
+ self::assertSame($waitlistId, $waitlistItemResult->id);
+ self::assertSame($note, $waitlistItemResult->note);
+
+ $updatedNote = 'Booking waitlist updated note ' . $this->uniqueSuffix();
+ self::assertTrue($this->waitlistService->update($waitlistId, [
+ 'note' => $updatedNote,
+ ])->isSuccess());
+
+ $updatedWaitlist = $this->waitlistService->get($waitlistId)->getWaitlist();
+ self::assertSame($updatedNote, $updatedWaitlist->note);
+
+ $listedWaitlist = $this->findItemById($this->waitlistService->list(['id' => $waitlistId])->getWaitlists(), $waitlistId);
+ self::assertNotNull($listedWaitlist);
+ self::assertSame($updatedNote, $listedWaitlist->note);
+
+ self::assertTrue($this->waitlistService->delete($waitlistId)->isSuccess());
+ }
+
+ public function testCreateFromBooking(): void
+ {
+ $resourceTypeId = $this->createResourceType();
+ $resourceId = $this->createResource($resourceTypeId);
+ $bookingId = $this->createBooking($resourceId);
+
+ $waitlistId = $this->waitlistService->createFromBooking($bookingId)->getId();
+ $this->createdWaitlistIds[] = $waitlistId;
+
+ self::assertGreaterThan(0, $waitlistId);
+ self::assertSame($waitlistId, $this->waitlistService->get($waitlistId)->getWaitlist()->id);
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/WaitlistClient/Result/WaitlistClientItemResultAnnotationsTest.php b/tests/Integration/Services/Booking/WaitlistClient/Result/WaitlistClientItemResultAnnotationsTest.php
new file mode 100644
index 00000000..b773a996
--- /dev/null
+++ b/tests/Integration/Services/Booking/WaitlistClient/Result/WaitlistClientItemResultAnnotationsTest.php
@@ -0,0 +1,123 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\WaitlistClient\Result;
+
+use Bitrix24\SDK\Services\Booking\WaitlistClient\Result\WaitlistClientItemResult;
+use Bitrix24\SDK\Services\Booking\WaitlistClient\Service\WaitlistClient;
+use Bitrix24\SDK\Tests\CustomAssertions\CustomBitrix24Assertions;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+use PHPUnit\Framework\Attributes\Depends;
+
+#[CoversClass(WaitlistClientItemResult::class)]
+#[CoversMethod(WaitlistClient::class, 'list')]
+class WaitlistClientItemResultAnnotationsTest extends BookingScopeTestCase
+{
+ use CustomBitrix24Assertions;
+
+ /**
+ * @var array
+ */
+ private const array WAITLIST_CLIENT_FIELD_TYPES = [
+ 'id' => ['type' => 'int'],
+ 'type' => ['type' => 'array'],
+ ];
+
+ private WaitlistClient $waitlistClientService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->waitlistClientService = $this->serviceBuilder->getBookingScope()->waitlistClient();
+ }
+
+ /**
+ * @return string[]
+ */
+ public function testAllSystemFieldsAnnotated(): array
+ {
+ $waitlistId = $this->createWaitlist();
+ $contactId = $this->createCrmContact();
+ $fieldCodes = array_keys($this->getWaitlistClientPayload($waitlistId, $contactId));
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $fieldCodes,
+ WaitlistClientItemResult::class
+ );
+
+ return $fieldCodes;
+ }
+
+ #[Depends('testAllSystemFieldsAnnotated')]
+ public function testAllSystemFieldsHasValidTypeAnnotation(array $fieldCodes): void
+ {
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodes),
+ WaitlistClientItemResult::class
+ );
+ }
+
+ /**
+ * @return array
+ */
+ private function getWaitlistClientPayload(int $waitlistId, int $contactId): array
+ {
+ $this->ensureContactClientTypeIsAvailable();
+
+ self::assertTrue($this->waitlistClientService->set($waitlistId, [[
+ 'id' => $contactId,
+ 'type' => [
+ 'module' => 'crm',
+ 'code' => 'CONTACT',
+ ],
+ ]])->isSuccess());
+
+ $items = $this->waitlistClientService
+ ->list($waitlistId)
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['waitListClient'];
+
+ self::assertNotSame([], $items, 'booking.v1.waitlist.client.list returned no clients after set().');
+
+ return $items[0];
+ }
+
+ private function ensureContactClientTypeIsAvailable(): void
+ {
+ $clientTypeCodes = array_map(
+ static fn(object $clientType): ?string => $clientType->code,
+ $this->serviceBuilder->getBookingScope()->clientType()->list()->getClientTypes()
+ );
+
+ if (!in_array('CONTACT', $clientTypeCodes, true)) {
+ self::markTestSkipped('Portal has no CONTACT booking client type configured.');
+ }
+ }
+
+ /**
+ * @param string[] $fieldCodes
+ *
+ * @return array
+ */
+ private function mapFieldTypes(array $fieldCodes): array
+ {
+ $unknownFieldCodes = array_values(array_diff($fieldCodes, array_keys(self::WAITLIST_CLIENT_FIELD_TYPES)));
+ self::assertSame([], $unknownFieldCodes, 'Add type mappings for new WaitlistClient fields before asserting annotations.');
+
+ return array_intersect_key(self::WAITLIST_CLIENT_FIELD_TYPES, array_flip($fieldCodes));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/WaitlistClient/Service/WaitlistClientTest.php b/tests/Integration/Services/Booking/WaitlistClient/Service/WaitlistClientTest.php
new file mode 100644
index 00000000..48c93e1c
--- /dev/null
+++ b/tests/Integration/Services/Booking/WaitlistClient/Service/WaitlistClientTest.php
@@ -0,0 +1,67 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\WaitlistClient\Service;
+
+use Bitrix24\SDK\Services\Booking\WaitlistClient\Service\WaitlistClient;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+
+#[CoversClass(WaitlistClient::class)]
+#[CoversMethod(WaitlistClient::class, 'list')]
+#[CoversMethod(WaitlistClient::class, 'set')]
+#[CoversMethod(WaitlistClient::class, 'unset')]
+class WaitlistClientTest extends BookingScopeTestCase
+{
+ private WaitlistClient $waitlistClientService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->waitlistClientService = $this->serviceBuilder->getBookingScope()->waitlistClient();
+ }
+
+ public function testSetListUnset(): void
+ {
+ $clientTypeCodes = array_map(
+ static fn(object $clientType): ?string => $clientType->code,
+ $this->serviceBuilder->getBookingScope()->clientType()->list()->getClientTypes()
+ );
+
+ if (!in_array('CONTACT', $clientTypeCodes, true)) {
+ self::markTestSkipped('Portal has no CONTACT booking client type configured.');
+ }
+
+ $waitlistId = $this->createWaitlist();
+ $contactId = $this->createCrmContact();
+
+ self::assertTrue($this->waitlistClientService->set($waitlistId, [[
+ 'id' => $contactId,
+ 'type' => [
+ 'module' => 'crm',
+ 'code' => 'CONTACT',
+ ],
+ ]])->isSuccess());
+
+ $clients = $this->waitlistClientService->list($waitlistId)->getClients();
+ self::assertCount(1, $clients);
+ self::assertSame($contactId, $clients[0]->id);
+ self::assertSame('crm', $clients[0]->type['module']);
+ self::assertSame('CONTACT', $clients[0]->type['code']);
+
+ self::assertTrue($this->waitlistClientService->unset($waitlistId)->isSuccess());
+ self::assertCount(0, $this->waitlistClientService->list($waitlistId)->getClients());
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/WaitlistExternalData/Result/WaitlistExternalDataItemResultAnnotationsTest.php b/tests/Integration/Services/Booking/WaitlistExternalData/Result/WaitlistExternalDataItemResultAnnotationsTest.php
new file mode 100644
index 00000000..86417049
--- /dev/null
+++ b/tests/Integration/Services/Booking/WaitlistExternalData/Result/WaitlistExternalDataItemResultAnnotationsTest.php
@@ -0,0 +1,108 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\WaitlistExternalData\Result;
+
+use Bitrix24\SDK\Services\Booking\WaitlistExternalData\Result\WaitlistExternalDataItemResult;
+use Bitrix24\SDK\Services\Booking\WaitlistExternalData\Service\WaitlistExternalData;
+use Bitrix24\SDK\Tests\CustomAssertions\CustomBitrix24Assertions;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+use PHPUnit\Framework\Attributes\Depends;
+
+#[CoversClass(WaitlistExternalDataItemResult::class)]
+#[CoversMethod(WaitlistExternalData::class, 'list')]
+class WaitlistExternalDataItemResultAnnotationsTest extends BookingScopeTestCase
+{
+ use CustomBitrix24Assertions;
+
+ /**
+ * @var array
+ */
+ private const array WAITLIST_EXTERNAL_DATA_FIELD_TYPES = [
+ 'moduleId' => ['type' => 'string'],
+ 'entityTypeId' => ['type' => 'string'],
+ 'value' => ['type' => 'string'],
+ ];
+
+ private WaitlistExternalData $waitlistExternalDataService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->waitlistExternalDataService = $this->serviceBuilder->getBookingScope()->waitlistExternalData();
+ }
+
+ /**
+ * @return string[]
+ */
+ public function testAllSystemFieldsAnnotated(): array
+ {
+ $waitlistId = $this->createWaitlist();
+ $dealId = $this->createCrmDeal();
+ $fieldCodes = array_keys($this->getWaitlistExternalDataPayload($waitlistId, $dealId));
+
+ $this->assertBitrix24AllResultItemFieldsAnnotated(
+ $fieldCodes,
+ WaitlistExternalDataItemResult::class
+ );
+
+ return $fieldCodes;
+ }
+
+ #[Depends('testAllSystemFieldsAnnotated')]
+ public function testAllSystemFieldsHasValidTypeAnnotation(array $fieldCodes): void
+ {
+ $this->assertBitrix24AllResultItemFieldsHasValidTypeAnnotation(
+ $this->mapFieldTypes($fieldCodes),
+ WaitlistExternalDataItemResult::class
+ );
+ }
+
+ /**
+ * @return array
+ */
+ private function getWaitlistExternalDataPayload(int $waitlistId, int $dealId): array
+ {
+ self::assertTrue($this->waitlistExternalDataService->set($waitlistId, [[
+ 'moduleId' => 'crm',
+ 'entityTypeId' => 'DEAL',
+ 'value' => (string)$dealId,
+ ]])->isSuccess());
+
+ $items = $this->waitlistExternalDataService
+ ->list($waitlistId)
+ ->getCoreResponse()
+ ->getResponseData()
+ ->getResult()['externalData'];
+
+ self::assertNotSame([], $items, 'booking.v1.waitlist.externalData.list returned no external data after set().');
+
+ return $items[0];
+ }
+
+ /**
+ * @param string[] $fieldCodes
+ *
+ * @return array
+ */
+ private function mapFieldTypes(array $fieldCodes): array
+ {
+ $unknownFieldCodes = array_values(array_diff($fieldCodes, array_keys(self::WAITLIST_EXTERNAL_DATA_FIELD_TYPES)));
+ self::assertSame([], $unknownFieldCodes, 'Add type mappings for new WaitlistExternalData fields before asserting annotations.');
+
+ return array_intersect_key(self::WAITLIST_EXTERNAL_DATA_FIELD_TYPES, array_flip($fieldCodes));
+ }
+}
\ No newline at end of file
diff --git a/tests/Integration/Services/Booking/WaitlistExternalData/Service/WaitlistExternalDataTest.php b/tests/Integration/Services/Booking/WaitlistExternalData/Service/WaitlistExternalDataTest.php
new file mode 100644
index 00000000..55b30b80
--- /dev/null
+++ b/tests/Integration/Services/Booking/WaitlistExternalData/Service/WaitlistExternalDataTest.php
@@ -0,0 +1,56 @@
+
+ *
+ * For the full copyright and license information, please view the MIT-LICENSE.txt
+ * file that was distributed with this source code.
+ */
+
+declare(strict_types=1);
+
+namespace Bitrix24\SDK\Tests\Integration\Services\Booking\WaitlistExternalData\Service;
+
+use Bitrix24\SDK\Services\Booking\WaitlistExternalData\Service\WaitlistExternalData;
+use Bitrix24\SDK\Tests\Integration\Services\Booking\Support\BookingScopeTestCase;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\CoversMethod;
+
+#[CoversClass(WaitlistExternalData::class)]
+#[CoversMethod(WaitlistExternalData::class, 'list')]
+#[CoversMethod(WaitlistExternalData::class, 'set')]
+#[CoversMethod(WaitlistExternalData::class, 'unset')]
+class WaitlistExternalDataTest extends BookingScopeTestCase
+{
+ private WaitlistExternalData $waitlistExternalDataService;
+
+ #[\Override]
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $this->waitlistExternalDataService = $this->serviceBuilder->getBookingScope()->waitlistExternalData();
+ }
+
+ public function testSetListUnset(): void
+ {
+ $waitlistId = $this->createWaitlist();
+ $dealId = $this->createCrmDeal();
+
+ self::assertTrue($this->waitlistExternalDataService->set($waitlistId, [[
+ 'moduleId' => 'crm',
+ 'entityTypeId' => 'DEAL',
+ 'value' => (string)$dealId,
+ ]])->isSuccess());
+
+ $externalData = $this->waitlistExternalDataService->list($waitlistId)->getExternalData();
+ self::assertCount(1, $externalData);
+ self::assertSame('crm', $externalData[0]->moduleId);
+ self::assertSame('DEAL', $externalData[0]->entityTypeId);
+ self::assertSame((string)$dealId, $externalData[0]->value);
+
+ self::assertTrue($this->waitlistExternalDataService->unset($waitlistId)->isSuccess());
+ self::assertCount(0, $this->waitlistExternalDataService->list($waitlistId)->getExternalData());
+ }
+}
\ No newline at end of file