{"openapi":"3.0.3","components":{"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}},"schemas":{}},"info":{"title":"ProsessPilotene API","description":"ProsessPilotene HTTP API. Auth0 RS256 only (AUTH0_DOMAIN + AUTH0_AUDIENCE). Domain logic and Dataverse repositories in @workspace/model-prosesspilotene (transport in @workspace/dal-dataverse).","version":"1.0.0"},"paths":{"/health":{"get":{"description":"Liveness and Dataverse health.","summary":"Health check","tags":["Health"],"operationId":"getHealth"}},"/v1/accounts":{"get":{"description":"Lists accounts from Dataverse (paginated). Optional query `top` (page size, default 25). Use `meta.nextLink` for the next page when present.","security":[{"bearerAuth":[]}],"summary":"List all accounts","tags":["Accounts"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Accounts"},"post":{"description":"Creates an account in Dataverse. Body must include `name` and optional fields per the Dataverse account schema. Send `Content-Type: application/json` or `application/x-protobuf` (GenericStructPayload).","security":[{"bearerAuth":[]}],"summary":"Create account","tags":["Accounts"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Accounts"}},"/v1/accounts/by-org/{orgNo}":{"get":{"description":"Lists accounts whose organization number matches `orgNo` (path segment). Example: `GET /v1/accounts/by-org/123456789`.","security":[{"bearerAuth":[]}],"summary":"List accounts by organization number","tags":["Accounts"],"parameters":[{"name":"orgNo","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1AccountsBy-orgByOrgNo"}},"/v1/accounts/{id}":{"put":{"description":"Updates an account in Dataverse using PATCH semantics. Send `ifMatch` with the current `@odata.etag` value and any fields to change (same shape as create, all optional except concurrency).","security":[{"bearerAuth":[]}],"summary":"Update account","tags":["Accounts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"putV1AccountsById"},"get":{"security":[{"bearerAuth":[]}],"summary":"Get account by id","tags":["Accounts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1AccountsById"},"delete":{"description":"Deletes an account in Dataverse. Requires `If-Match` with the current `@odata.etag`.","security":[{"bearerAuth":[]}],"summary":"Delete account","tags":["Accounts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1AccountsById"}},"/v1/accounts/{id}/customer-asset":{"get":{"security":[{"bearerAuth":[]}],"summary":"Customer asset for account","tags":["Accounts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1AccountsByIdCustomer-asset"}},"/v1/auth-bootstrap/contact":{"post":{"description":"Post-login contactAction: match or create Contact by email (M2M only). Body: JSON or protobuf (`GenericStructPayload`); read via `request.arrayBuffer()` so Auth0 Actions and other `fetch`+JSON clients work on Vercel (avoid `body: t.ArrayBuffer()` validation mismatches).","security":[{"bearerAuth":[]}],"summary":"Auth bootstrap — contact","tags":["AuthBootstrap"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"postV1Auth-bootstrapContact"}},"/v1/auth-bootstrap/account":{"post":{"description":"Post-login accountAction: confirm Contact → Account via parent customer (`_parentcustomerid_value`); returns account metadata for Auth0 Organization sync. Requires M2M `read:account` and `read:contact`. Body read via `request.arrayBuffer()` for JSON/protobuf compatibility with M2M callers on Vercel.","security":[{"bearerAuth":[]}],"summary":"Auth bootstrap — account","tags":["AuthBootstrap"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"postV1Auth-bootstrapAccount"}},"/v1/bookings":{"get":{"description":"Lists Field Service resource bookings from Dataverse (`bookableresourcebookings`). Optional query `top` (page size, default 25). Use `meta.nextLink` for the next page when present.","security":[{"bearerAuth":[]}],"summary":"List resource bookings","tags":["Bookings"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Bookings"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create resource booking","tags":["Bookings"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Bookings"}},"/v1/bookings/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get resource booking by id","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1BookingsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update resource booking","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1BookingsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete resource booking","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1BookingsById"}},"/v1/cases":{"get":{"security":[{"bearerAuth":[]}],"summary":"List cases","tags":["Cases"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Cases"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create case","tags":["Cases"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Cases"}},"/v1/cases/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get case by id","tags":["Cases"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1CasesById"}},"/v1/cases/{id}/status":{"patch":{"security":[{"bearerAuth":[]}],"summary":"Update case status","tags":["Cases"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1CasesByIdStatus"}},"/v1/cases/{id}/assign":{"patch":{"security":[{"bearerAuth":[]}],"summary":"Assign case","tags":["Cases"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1CasesByIdAssign"}},"/v1/contacts":{"get":{"description":"Lists contacts from Dataverse (paginated). Optional query `top` (page size, default 25). Use `meta.nextLink` for the next page when present.","security":[{"bearerAuth":[]}],"summary":"List all contacts","tags":["Contacts"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Contacts"}},"/v1/contacts/by-email":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get contact by email","tags":["Contacts"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1ContactsBy-email"}},"/v1/contacts/{id}":{"patch":{"security":[{"bearerAuth":[]}],"summary":"Update contact","tags":["Contacts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1ContactsById"}},"/v1/contacts/{contactId}/account-relations":{"get":{"security":[{"bearerAuth":[]}],"summary":"Account relations for contact","tags":["Contacts"],"parameters":[{"name":"contactId","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1ContactsByContactIdAccount-relations"}},"/v1/events":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Events"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Events"}},"/v1/events/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1EventsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1EventsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1EventsById"}},"/v1/event-registrations":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event registration","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-registrations"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event registration","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-registrations"}},"/v1/event-registrations/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event registration by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-registrationsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event registration","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-registrationsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event registration","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-registrationsById"}},"/v1/event-sessions":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event session","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-sessions"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event session","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-sessions"}},"/v1/event-sessions/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event session by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-sessionsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event session","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-sessionsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event session","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-sessionsById"}},"/v1/event-session-registrations":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event session registration","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-session-registrations"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event session registration","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-session-registrations"}},"/v1/event-session-registrations/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event session registration by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-session-registrationsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event session registration","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-session-registrationsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event session registration","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-session-registrationsById"}},"/v1/event-speakers":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event speaker","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-speakers"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event speaker","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-speakers"}},"/v1/event-speakers/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event speaker by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-speakersById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event speaker","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-speakersById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event speaker","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-speakersById"}},"/v1/event-speaker-engagements":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event speaker engagement","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-speaker-engagements"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event speaker engagement","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-speaker-engagements"}},"/v1/event-speaker-engagements/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event speaker engagement by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-speaker-engagementsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event speaker engagement","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-speaker-engagementsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event speaker engagement","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-speaker-engagementsById"}},"/v1/event-sponsorships":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event sponsorship","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-sponsorships"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event sponsorship","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-sponsorships"}},"/v1/event-sponsorships/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event sponsorship by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-sponsorshipsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event sponsorship","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-sponsorshipsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event sponsorship","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-sponsorshipsById"}},"/v1/event-sponsor-types":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event sponsor type","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-sponsor-types"}},"/v1/event-sponsor-types/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event sponsor type by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-sponsor-typesById"}},"/v1/event-buildings":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event building","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-buildings"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event building","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-buildings"}},"/v1/event-buildings/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event building by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-buildingsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event building","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-buildingsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event building","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-buildingsById"}},"/v1/event-rooms":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event room","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-rooms"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event room","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-rooms"}},"/v1/event-rooms/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event room by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-roomsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event room","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-roomsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event room","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-roomsById"}},"/v1/event-team-members":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event team member","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-team-members"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event team member","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-team-members"}},"/v1/event-team-members/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event team member by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-team-membersById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event team member","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-team-membersById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event team member","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-team-membersById"}},"/v1/event-custom-registration-fields":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event custom registration field","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-custom-registration-fields"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event custom registration field","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-custom-registration-fields"}},"/v1/event-custom-registration-fields/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event custom registration field by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-custom-registration-fieldsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event custom registration field","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-custom-registration-fieldsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event custom registration field","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-custom-registration-fieldsById"}},"/v1/event-waitlist-items":{"get":{"description":"Lists Dynamics 365 Event Management records. Optional query `eventId`, `top`, `nextLink`.","security":[{"bearerAuth":[]}],"summary":"List event waitlist item","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-waitlist-items"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create event waitlist item","tags":["Events"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Event-waitlist-items"}},"/v1/event-waitlist-items/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get event waitlist item by id","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Event-waitlist-itemsById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update event waitlist item","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Event-waitlist-itemsById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete event waitlist item","tags":["Events"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Event-waitlist-itemsById"}},"/v1/files":{"post":{"description":"Upload a blob to Azure Storage. Requires Azure storage configuration and `write:file` scope.","security":[{"bearerAuth":[]}],"summary":"Upload file","tags":["Files"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Files"}},"/v1/files/{container}/{blobName}":{"get":{"description":"Download a blob from Azure Storage by container and blob name.","security":[{"bearerAuth":[]}],"summary":"Download file","tags":["Files"],"parameters":[{"name":"container","in":"path","required":true,"schema":{"type":"string"}},{"name":"blobName","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1FilesByContainerByBlobName"},"delete":{"description":"Delete a blob from Azure Storage by container and blob name.","security":[{"bearerAuth":[]}],"summary":"Delete file","tags":["Files"],"parameters":[{"name":"container","in":"path","required":true,"schema":{"type":"string"}},{"name":"blobName","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1FilesByContainerByBlobName"}},"/v1/invoices":{"get":{"security":[{"bearerAuth":[]}],"summary":"List invoices","tags":["Invoices"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Invoices"}},"/v1/invoices/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get invoice by id","tags":["Invoices"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1InvoicesById"}},"/v1/knowledge-articles":{"get":{"security":[{"bearerAuth":[]}],"summary":"List knowledge articles","tags":["Knowledge"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Knowledge-articles"}},"/v1/knowledge-articles/{id}":{"get":{"description":"Lookup by Dataverse `knowledgearticleid` (GUID) or public `articlepublicnumber` (e.g. `KA-01012`).","security":[{"bearerAuth":[]}],"summary":"Get knowledge article","tags":["Knowledge"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Knowledge-articlesById"}},"/v1/leads/by-account/{accountId}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Leads by account","tags":["Leads"],"parameters":[{"name":"accountId","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1LeadsBy-accountByAccountId"}},"/v1/leads":{"get":{"security":[{"bearerAuth":[]}],"summary":"List leads","tags":["Leads"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Leads"}},"/v1/leads/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get lead by id","tags":["Leads"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1LeadsById"}},"/v1/leads/{id}/source-code":{"patch":{"security":[{"bearerAuth":[]}],"summary":"Update lead source code","tags":["Leads"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1LeadsByIdSource-code"}},"/v1/leads/connected":{"post":{"security":[{"bearerAuth":[]}],"summary":"Create lead connected to account","tags":["Leads"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1LeadsConnected"}},"/v1/me":{"get":{"description":"Returns the signed-in user's own CRM contact. The contact is resolved from the token; no identifier is accepted from the client.","security":[{"bearerAuth":[]}],"summary":"Get my profile","tags":["Me"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Me"},"patch":{"description":"Updates the signed-in user's own contact. Requires `ifMatch` from a prior GET; a stale value returns 409 rather than overwriting. A `contactId` in the body is ignored.","security":[{"bearerAuth":[]}],"summary":"Update my profile","tags":["Me"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Me"}},"/v1/me/avatar":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get my avatar","tags":["Me"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1MeAvatar"},"put":{"description":"Replaces the signed-in user's avatar. JPEG, PNG or WebP, at most 512 KB; the image type is determined from the bytes, not the header.","security":[{"bearerAuth":[]}],"summary":"Set my avatar","tags":["Me"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{},"required":true},"operationId":"putV1MeAvatar"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Remove my avatar","tags":["Me"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1MeAvatar"}},"/v1/me/consents":{"patch":{"description":"Records the signed-in user's consent choices. Both flags must be sent explicitly; the call fails rather than returning 200 if the Dataverse environment cannot store them.","security":[{"bearerAuth":[]}],"summary":"Update my consents","tags":["Me"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1MeConsents"}},"/v1/me/preferences":{"patch":{"security":[{"bearerAuth":[]}],"summary":"Update my UI preferences","tags":["Me"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1MePreferences"}},"/v1/me/identities":{"get":{"security":[{"bearerAuth":[]}],"summary":"List my linked identities and passkeys","tags":["Me"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1MeIdentities"}},"/v1/me/identities/{provider}/{providerUserId}":{"delete":{"security":[{"bearerAuth":[]}],"summary":"Unlink one of my sign-in methods","tags":["Me"],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"providerUserId","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1MeIdentitiesByProviderByProviderUserId"}},"/v1/me/passkeys/{passkeyId}":{"delete":{"description":"Deletes one of the caller's passkeys. Enrolment cannot happen here — the app deep-links into hosted login for that.","security":[{"bearerAuth":[]}],"summary":"Delete one of my passkeys","tags":["Me"],"parameters":[{"name":"passkeyId","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1MePasskeysByPasskeyId"}},"/v1/me/deletion-request":{"post":{"description":"Records a GDPR Art. 17 erasure request as a Dataverse case and returns its id and SLA. Satisfies App Store Guideline 5.1.1(v); it does not itself erase data.","security":[{"bearerAuth":[]}],"summary":"Request account deletion","tags":["Me"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1MeDeletion-request"}},"/v1/me/notifications":{"get":{"description":"Thread summaries for the signed-in user's inbox, ordered by last activity desc, cursor-paged. `userKeys` are resolved from the token — contact id and Auth0 subject, never accepted from the client.","security":[{"bearerAuth":[]}],"summary":"List my notification threads","tags":["Notifications"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1MeNotifications"}},"/v1/me/notifications/unread-count":{"get":{"description":"Count of threads with at least one unread entry — the bell badge.","security":[{"bearerAuth":[]}],"summary":"My unread notification thread count","tags":["Notifications"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1MeNotificationsUnread-count"}},"/v1/me/notifications/sync":{"get":{"description":"Delta sync for the native app's local mirror: everything with `sync_seq > since`, in one monotonic total order across threads and entries. `since=0` is the full snapshot, so first-launch and incremental sync share this one endpoint.","security":[{"bearerAuth":[]}],"summary":"Sync my notifications since a cursor","tags":["Notifications"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1MeNotificationsSync"}},"/v1/me/notifications/{threadId}":{"get":{"description":"A thread with its entries, chronological. 404 when the thread doesn't exist or isn't owned by the caller — the two are indistinguishable.","security":[{"bearerAuth":[]}],"summary":"Get one of my notification threads","tags":["Notifications"],"parameters":[{"name":"threadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1MeNotificationsByThreadId"}},"/v1/me/notifications/{threadId}/read":{"post":{"description":"Marks every entry in the thread read (set-once — already-read entries are untouched). Fired on opening the thread.","security":[{"bearerAuth":[]}],"summary":"Mark one of my notification threads read","tags":["Notifications"],"parameters":[{"name":"threadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1MeNotificationsByThreadIdRead"}},"/v1/me/notifications/read-all":{"post":{"description":"The \"mark all as read\" button: marks every entry across all of my threads read (set-once).","security":[{"bearerAuth":[]}],"summary":"Mark all of my notifications read","tags":["Notifications"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1MeNotificationsRead-all"}},"/v1/me/notifications/{threadId}/task-status":{"post":{"description":"Sets a task thread's status (\"open\" or \"done\"). Last-write-wins at the server — there is no conflicting-writer timestamp to compare against.","security":[{"bearerAuth":[]}],"summary":"Set the task status of one of my notification threads","tags":["Notifications"],"parameters":[{"name":"threadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1MeNotificationsByThreadIdTask-status"}},"/v1/me/inbox/messages":{"post":{"description":"Starts an outbound conversation: creates a `message`/`task` thread with a `direction: 'out'` entry, then best-effort creates the Dataverse `message` activity (env-gated by `DATAVERSE_MESSAGE_ENTITY`), storing its GUID as the thread's `related_record_id`. `id` is an optional client-generated UUID — replaying the same `id` returns the existing thread rather than creating a duplicate.","security":[{"bearerAuth":[]}],"summary":"Start an outbound inbox conversation","tags":["Notifications"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1MeInboxMessages"}},"/v1/me/inbox/threads/{threadId}/messages":{"post":{"description":"Replies within one of my inbox conversations: appends a `direction: 'out'` entry, then best-effort creates a linked Dataverse `message` activity. 404 when the thread doesn't exist or isn't owned by the caller. `id` is an optional client-generated UUID for idempotent replay.","security":[{"bearerAuth":[]}],"summary":"Reply within one of my inbox conversations","tags":["Notifications"],"parameters":[{"name":"threadId","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1MeInboxThreadsByThreadIdMessages"}},"/v1/me/settings":{"get":{"description":"All of my settings, merged one row per key across the CRM contact id and Auth0 subject. The newer `updatedAt` wins; a tie is broken in favour of the contact-linked row.","security":[{"bearerAuth":[]}],"summary":"Get my settings","tags":["Me"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1MeSettings"}},"/v1/me/settings/{key}":{"put":{"description":"Sets one of my settings, last-write-wins on `updatedAt` (a stale write is a no-op — the stored row is returned unchanged). `updatedAt` must be an ISO-8601 instant; anything else is a 400.","security":[{"bearerAuth":[]}],"summary":"Set one of my settings","tags":["Me"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"putV1MeSettingsByKey"}},"/v1/orders":{"get":{"description":"Lists sales orders from Dataverse (paginated). Optional query `top` (page size, default 25). Use `meta.nextLink` for the next page when present.","security":[{"bearerAuth":[]}],"summary":"List all orders","tags":["Orders"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Orders"}},"/v1/orders/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get order with lines","tags":["Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1OrdersById"}},"/v1/orders/with-lines":{"post":{"security":[{"bearerAuth":[]}],"summary":"Create order with lines","tags":["Orders"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1OrdersWith-lines"}},"/v1/orders/price-level/digital-log-book":{"get":{"security":[{"bearerAuth":[]}],"summary":"Digital log book price level","tags":["Orders"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1OrdersPrice-levelDigital-log-book"}},"/v1/products/{productId}/prices":{"get":{"security":[{"bearerAuth":[]}],"summary":"List prices by product","tags":["Prices"],"parameters":[{"name":"productId","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1ProductsByProductIdPrices"}},"/v1/prices":{"get":{"description":"Lists active Dataverse price lists (`pricelevels`, `statecode` 0) with validity dates, currency, and commercial metadata. Optional query `top` (page size, default 25). Use `meta.nextLink` for the next page when present.","security":[{"bearerAuth":[]}],"summary":"List active price lists","tags":["Prices"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Prices"}},"/v1/prices/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get price by id","tags":["Prices"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1PricesById"}},"/v1/products":{"get":{"description":"Lists products from Dataverse (paginated) with status, type, pricing, unit, and validity metadata. Optional query `top` (page size, default 25). Use `meta.nextLink` for the next page when present.","security":[{"bearerAuth":[]}],"summary":"List all products","tags":["Products"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Products"}},"/v1/products/by-name":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get product by name","tags":["Products"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1ProductsBy-name"}},"/v1/products/{productId}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get product by id","tags":["Products"],"parameters":[{"name":"productId","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1ProductsByProductId"}},"/v1/projects":{"get":{"security":[{"bearerAuth":[]}],"summary":"List projects","tags":["Projects"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Projects"}},"/v1/projects/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get project by id","tags":["Projects"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1ProjectsById"}},"/v1/quotes":{"get":{"security":[{"bearerAuth":[]}],"summary":"List quotes","tags":["Quotes"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Quotes"}},"/v1/quotes/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get quote by id","tags":["Quotes"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1QuotesById"}},"/v1/resources":{"get":{"description":"Lists Field Service bookable resources from Dataverse (`bookableresources`). Optional query `top` (page size, default 25). Use `meta.nextLink` for the next page when present.","security":[{"bearerAuth":[]}],"summary":"List bookable resources","tags":["Resources"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Resources"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create bookable resource","tags":["Resources"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Resources"}},"/v1/resources/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get bookable resource by id","tags":["Resources"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1ResourcesById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update bookable resource","tags":["Resources"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1ResourcesById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete bookable resource","tags":["Resources"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1ResourcesById"}},"/v1/self-service/answer":{"post":{"security":[{"bearerAuth":[]}],"summary":"Self-service assistant answer","tags":["SelfService"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Self-serviceAnswer"}},"/v1/timesheets":{"get":{"security":[{"bearerAuth":[]}],"summary":"List timesheets","tags":["Timesheets"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Timesheets"}},"/v1/timesheets/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get timesheet by id","tags":["Timesheets"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1TimesheetsById"}},"/v1/work-orders":{"get":{"description":"Lists Field Service work orders from Dataverse (`msdyn_workorders`). Optional query `top` (page size, default 25). Use `meta.nextLink` for the next page when present.","security":[{"bearerAuth":[]}],"summary":"List work orders","tags":["Work Orders"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Work-orders"},"post":{"security":[{"bearerAuth":[]}],"summary":"Create work order","tags":["Work Orders"],"parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"postV1Work-orders"}},"/v1/work-orders/{id}":{"get":{"security":[{"bearerAuth":[]}],"summary":"Get work order by id","tags":["Work Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"getV1Work-ordersById"},"patch":{"security":[{"bearerAuth":[]}],"summary":"Update work order","tags":["Work Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"default":[1,2,3]}},"application/x-www-form-urlencoded":{"schema":{"default":[1,2,3]}},"multipart/form-data":{"schema":{"default":[1,2,3]}}}},"operationId":"patchV1Work-ordersById"},"delete":{"security":[{"bearerAuth":[]}],"summary":"Delete work order","tags":["Work Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","pattern":"^Bearer\\s+\\S.+$"}},{"name":"x-correlation-id","in":"header","required":false,"schema":{"type":"string"}}],"operationId":"deleteV1Work-ordersById"}},"/v1/notifications/register-device":{"post":{"description":"Registers an Expo push token for this device. Works signed-out (no Authorization header); a valid bearer token additionally records the caller's user_key — their CRM contact id when linked, else their Auth0 subject.","summary":"Register a device for push notifications","tags":["Notifications"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["platform","token"],"properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"},"platform":{"type":"string","enum":["android","ios"]},"token":{"minLength":1,"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["platform","token"],"properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"},"platform":{"type":"string","enum":["android","ios"]},"token":{"minLength":1,"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["platform","token"],"properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"},"platform":{"type":"string","enum":["android","ios"]},"token":{"minLength":1,"type":"string"}}}}}},"operationId":"postV1NotificationsRegister-device"}},"/v1/notifications/unregister-device":{"post":{"description":"Unregisters a device from push notifications. Anonymous (unlinked) devices are removed by possession of the token alone; a device linked to a `user_key` requires a bearer token resolving to that same key.","summary":"Unregister a device from push notifications","tags":["Notifications"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"minLength":1,"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["token"],"properties":{"token":{"minLength":1,"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["token"],"properties":{"token":{"minLength":1,"type":"string"}}}}}},"operationId":"postV1NotificationsUnregister-device"}},"/v1/notifications/dispatch":{"post":{"description":"Webhook for Dynamics 365 (Customer Insights journeys and Power Automate/Dataverse workflows): writes inbox rows and/or fans out push via Expo in one call. Authenticated with `X-Notification-Secret` against `NOTIFICATION_WEBHOOK_SECRET`. Replaces v1's `/send` — nothing else depends on that route.","summary":"Dispatch a notification (push and/or inbox)","tags":["Notifications"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["audience","body","channels","source","title"],"properties":{"audience":{"anyOf":[{"const":"all","type":"string"},{"type":"object","required":["contactIds"],"properties":{"contactIds":{"type":"array","items":{"minLength":1,"type":"string"}}}}]},"body":{"minLength":1,"type":"string"},"channels":{"type":"object","required":["inbox","push"],"properties":{"inbox":{"type":"boolean"},"push":{"type":"boolean"}}},"relatedRecordId":{"format":"uuid","type":"string"},"source":{"minLength":1,"type":"string"},"task":{"type":"object","required":["status"],"properties":{"status":{"const":"open","type":"string"}}},"threadKey":{"format":"uuid","type":"string"},"title":{"minLength":1,"type":"string"},"url":{"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["audience","body","channels","source","title"],"properties":{"audience":{"anyOf":[{"const":"all","type":"string"},{"type":"object","required":["contactIds"],"properties":{"contactIds":{"type":"array","items":{"minLength":1,"type":"string"}}}}]},"body":{"minLength":1,"type":"string"},"channels":{"type":"object","required":["inbox","push"],"properties":{"inbox":{"type":"boolean"},"push":{"type":"boolean"}}},"relatedRecordId":{"format":"uuid","type":"string"},"source":{"minLength":1,"type":"string"},"task":{"type":"object","required":["status"],"properties":{"status":{"const":"open","type":"string"}}},"threadKey":{"format":"uuid","type":"string"},"title":{"minLength":1,"type":"string"},"url":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["audience","body","channels","source","title"],"properties":{"audience":{"anyOf":[{"const":"all","type":"string"},{"type":"object","required":["contactIds"],"properties":{"contactIds":{"type":"array","items":{"minLength":1,"type":"string"}}}}]},"body":{"minLength":1,"type":"string"},"channels":{"type":"object","required":["inbox","push"],"properties":{"inbox":{"type":"boolean"},"push":{"type":"boolean"}}},"relatedRecordId":{"format":"uuid","type":"string"},"source":{"minLength":1,"type":"string"},"task":{"type":"object","required":["status"],"properties":{"status":{"const":"open","type":"string"}}},"threadKey":{"format":"uuid","type":"string"},"title":{"minLength":1,"type":"string"},"url":{"type":"string"}}}}}},"operationId":"postV1NotificationsDispatch"}},"/v1/notifications/by-record/{guid}":{"patch":{"description":"The Dynamics-workflow hook: matches `guid` against both thread- and entry-level `related_record_id`. A thread match can set `taskStatus` and/or mark all its entries read; an entry match marks that entry read. Authenticated with `X-Notification-Secret`.","summary":"Update inbox state by Dataverse record GUID","tags":["Notifications"],"parameters":[{"name":"guid","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"read":{"type":"boolean"},"taskStatus":{"type":"string","enum":["open","done"]}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"read":{"type":"boolean"},"taskStatus":{"type":"string","enum":["open","done"]}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"read":{"type":"boolean"},"taskStatus":{"type":"string","enum":["open","done"]}}}}}},"operationId":"patchV1NotificationsBy-recordByGuid"}},"/v1/notifications/internal/prune":{"get":{"description":"Retention sweep, called by Vercel Cron daily at 04:00 UTC (see `vercel.ts`): soft-deletes threads with no activity in the last 90 days. Threads with `taskStatus: 'open'` are exempt. Accepts either `X-Notification-Secret` (same as `dispatch`/`by-record`) or `Authorization: Bearer <secret>` (what Vercel Cron actually sends) against `NOTIFICATION_WEBHOOK_SECRET`.","summary":"Prune inactive notification threads (retention)","tags":["Notifications"],"operationId":"getV1NotificationsInternalPrune"}},"/v1/podcast-follows":{"get":{"summary":"List podcast follows","tags":["Podcast follows"],"parameters":[{"name":"deviceId","in":"query","required":false,"schema":{"maxLength":200,"minLength":1,"type":"string"}}],"operationId":"getV1Podcast-follows"},"put":{"summary":"Replace podcast follows","tags":["Podcast follows"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["podcastIds"],"properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"},"podcastIds":{"maxItems":500,"type":"array","items":{"minLength":1,"type":"string"}}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["podcastIds"],"properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"},"podcastIds":{"maxItems":500,"type":"array","items":{"minLength":1,"type":"string"}}}}},"multipart/form-data":{"schema":{"type":"object","required":["podcastIds"],"properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"},"podcastIds":{"maxItems":500,"type":"array","items":{"minLength":1,"type":"string"}}}}}}},"operationId":"putV1Podcast-follows"}},"/v1/podcasts/{podcastId}/follow":{"post":{"summary":"Follow a podcast","tags":["Podcast follows"],"parameters":[{"name":"podcastId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"}}}}}},"operationId":"postV1PodcastsByPodcastIdFollow"},"delete":{"summary":"Unfollow a podcast","tags":["Podcast follows"],"parameters":[{"name":"podcastId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"deviceId":{"maxLength":200,"minLength":1,"type":"string"}}}}}},"operationId":"deleteV1PodcastsByPodcastIdFollow"}},"/v1/notifications/internal/podcast/new-episode":{"post":{"description":"Idempotent Sanity Studio publish webhook for followers of a podcast episode.","summary":"Notify podcast followers of a new episode","tags":["Podcast follows"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{"minLength":1,"type":"string"},"deepLinkUrl":{"minLength":1,"type":"string"},"episodeId":{"minLength":1,"type":"string"},"episodeSlug":{"minLength":1,"type":"string"},"podcastId":{"minLength":1,"type":"string"},"podcastSlug":{"minLength":1,"type":"string"},"title":{"minLength":1,"type":"string"},"url":{"minLength":1,"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"body":{"minLength":1,"type":"string"},"deepLinkUrl":{"minLength":1,"type":"string"},"episodeId":{"minLength":1,"type":"string"},"episodeSlug":{"minLength":1,"type":"string"},"podcastId":{"minLength":1,"type":"string"},"podcastSlug":{"minLength":1,"type":"string"},"title":{"minLength":1,"type":"string"},"url":{"minLength":1,"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"body":{"minLength":1,"type":"string"},"deepLinkUrl":{"minLength":1,"type":"string"},"episodeId":{"minLength":1,"type":"string"},"episodeSlug":{"minLength":1,"type":"string"},"podcastId":{"minLength":1,"type":"string"},"podcastSlug":{"minLength":1,"type":"string"},"title":{"minLength":1,"type":"string"},"url":{"minLength":1,"type":"string"}}}}}},"operationId":"postV1NotificationsInternalPodcastNew-episode"}},"/v1/contact/":{"post":{"description":"Creates a Dataverse lead from the app's Kontakt oss form. Public — no Authorization header required or read.","summary":"Submit the Kontakt oss contact form","tags":["Contact"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["companyName","consent","email","firstName","lastName","phone"],"properties":{"companyName":{"maxLength":200,"minLength":1,"type":"string"},"consent":{"const":true,"type":"boolean"},"email":{"format":"email","maxLength":320,"type":"string"},"firstName":{"maxLength":100,"minLength":1,"type":"string"},"lastName":{"maxLength":100,"minLength":1,"type":"string"},"message":{"maxLength":4000,"type":"string"},"phone":{"maxLength":40,"minLength":1,"type":"string"},"wantsEventUpdates":{"type":"boolean"},"wantsProductNews":{"type":"boolean"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["companyName","consent","email","firstName","lastName","phone"],"properties":{"companyName":{"maxLength":200,"minLength":1,"type":"string"},"consent":{"const":true,"type":"boolean"},"email":{"format":"email","maxLength":320,"type":"string"},"firstName":{"maxLength":100,"minLength":1,"type":"string"},"lastName":{"maxLength":100,"minLength":1,"type":"string"},"message":{"maxLength":4000,"type":"string"},"phone":{"maxLength":40,"minLength":1,"type":"string"},"wantsEventUpdates":{"type":"boolean"},"wantsProductNews":{"type":"boolean"}}}},"multipart/form-data":{"schema":{"type":"object","required":["companyName","consent","email","firstName","lastName","phone"],"properties":{"companyName":{"maxLength":200,"minLength":1,"type":"string"},"consent":{"const":true,"type":"boolean"},"email":{"format":"email","maxLength":320,"type":"string"},"firstName":{"maxLength":100,"minLength":1,"type":"string"},"lastName":{"maxLength":100,"minLength":1,"type":"string"},"message":{"maxLength":4000,"type":"string"},"phone":{"maxLength":40,"minLength":1,"type":"string"},"wantsEventUpdates":{"type":"boolean"},"wantsProductNews":{"type":"boolean"}}}}}},"operationId":"postV1Contact"}}}}