{"openapi":"3.1.2","info":{"title":"Soljio Organization API","version":"0.1.0","description":"Organization-scoped domain reads, commands and tracked jobs. See docs/api/coverage.json for source mappings and explicit exceptions. Family self-service and platform administration are outside this contract. Service tokens select exactly one organization. No organization override is accepted.","license":{"name":"Proprietary"}},"servers":[{"url":"https://api.soljio.com/v0","description":"Production organization API on the public HTTP-actions alias. Requires the verified custom-domain cutover and API deployment."}],"security":[{"serviceToken":[]}],"tags":[{"name":"organizations","description":"Organization operations."},{"name":"locations","description":"Location operations."},{"name":"programs","description":"Program operations."},{"name":"offerings","description":"Offering operations."},{"name":"sessions","description":"Session operations."},{"name":"participants","description":"Participant operations."},{"name":"enrollments","description":"Enrollment operations."},{"name":"organization-commands","description":"Shared organization domain commands."},{"name":"organization-reads","description":"Organization read models and filtered views."}],"paths":{"/organizations":{"get":{"operationId":"list_organizations","summary":"List organizations","description":"Organization-scoped organization read. Requires organization.read. Unknown or repeated query parameters are rejected.","tags":["organizations"],"x-required-scopes":["organization.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/list_organizationsResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_list_organizations","summary":"Check List organizations","description":"Organization-scoped organization read. Requires organization.read. Unknown or repeated query parameters are rejected. HEAD returns the same status and headers as GET with no response body.","tags":["organizations"],"x-required-scopes":["organization.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/organizations/{id}":{"get":{"operationId":"get_organization","summary":"Get organization","description":"Organization-scoped organization read. Requires organization.read. Unknown or repeated query parameters are rejected.","tags":["organizations"],"x-required-scopes":["organization.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_organizationResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_get_organization","summary":"Check Get organization","description":"Organization-scoped organization read. Requires organization.read. Unknown or repeated query parameters are rejected. HEAD returns the same status and headers as GET with no response body.","tags":["organizations"],"x-required-scopes":["organization.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/locations":{"get":{"operationId":"list_locations","summary":"List locations","description":"Organization-scoped location read. Requires locations.read. Unknown or repeated query parameters are rejected.","tags":["locations"],"x-required-scopes":["locations.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/list_locationsResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_list_locations","summary":"Check List locations","description":"Organization-scoped location read. Requires locations.read. Unknown or repeated query parameters are rejected. HEAD returns the same status and headers as GET with no response body.","tags":["locations"],"x-required-scopes":["locations.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/locations/{id}":{"get":{"operationId":"get_location","summary":"Get location","description":"Organization-scoped location read. Requires locations.read. Unknown or repeated query parameters are rejected.","tags":["locations"],"x-required-scopes":["locations.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_locationResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_get_location","summary":"Check Get location","description":"Organization-scoped location read. Requires locations.read. Unknown or repeated query parameters are rejected. HEAD returns the same status and headers as GET with no response body.","tags":["locations"],"x-required-scopes":["locations.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/programs":{"get":{"operationId":"list_programs","summary":"List programs","description":"Organization-scoped program read. Requires catalog.read. Unknown or repeated query parameters are rejected.","tags":["programs"],"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/list_programsResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_list_programs","summary":"Check List programs","description":"Organization-scoped program read. Requires catalog.read. Unknown or repeated query parameters are rejected. HEAD returns the same status and headers as GET with no response body.","tags":["programs"],"x-required-scopes":["catalog.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/programs/{id}":{"get":{"operationId":"get_program","summary":"Get program","description":"Organization-scoped program read. Requires catalog.read. Unknown or repeated query parameters are rejected.","tags":["programs"],"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_programResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_get_program","summary":"Check Get program","description":"Organization-scoped program read. Requires catalog.read. Unknown or repeated query parameters are rejected. HEAD returns the same status and headers as GET with no response body.","tags":["programs"],"x-required-scopes":["catalog.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/offerings":{"get":{"operationId":"list_offerings","summary":"List offerings","description":"Organization-scoped offering read. Requires catalog.read. Unknown or repeated query parameters are rejected.","tags":["offerings"],"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/list_offeringsResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_list_offerings","summary":"Check List offerings","description":"Organization-scoped offering read. Requires catalog.read. Unknown or repeated query parameters are rejected. HEAD returns the same status and headers as GET with no response body.","tags":["offerings"],"x-required-scopes":["catalog.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/offerings/{id}":{"get":{"operationId":"get_offering","summary":"Get offering","description":"Organization-scoped offering read. Requires catalog.read. Unknown or repeated query parameters are rejected.","tags":["offerings"],"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_offeringResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_get_offering","summary":"Check Get offering","description":"Organization-scoped offering read. Requires catalog.read. Unknown or repeated query parameters are rejected. HEAD returns the same status and headers as GET with no response body.","tags":["offerings"],"x-required-scopes":["catalog.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/sessions":{"get":{"operationId":"list_sessions","summary":"List sessions","description":"Organization-scoped session read. Requires schedule.read. Unknown or repeated query parameters are rejected. This returns operational occurrences, not a third catalog/setup level.","tags":["sessions"],"x-required-scopes":["schedule.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/list_sessionsResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_list_sessions","summary":"Check List sessions","description":"Organization-scoped session read. Requires schedule.read. Unknown or repeated query parameters are rejected. This returns operational occurrences, not a third catalog/setup level. HEAD returns the same status and headers as GET with no response body.","tags":["sessions"],"x-required-scopes":["schedule.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/sessions/{id}":{"get":{"operationId":"get_session","summary":"Get session","description":"Organization-scoped session read. Requires schedule.read. Unknown or repeated query parameters are rejected. This returns operational occurrences, not a third catalog/setup level.","tags":["sessions"],"x-required-scopes":["schedule.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_sessionResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_get_session","summary":"Check Get session","description":"Organization-scoped session read. Requires schedule.read. Unknown or repeated query parameters are rejected. This returns operational occurrences, not a third catalog/setup level. HEAD returns the same status and headers as GET with no response body.","tags":["sessions"],"x-required-scopes":["schedule.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/participants":{"get":{"operationId":"list_participants","summary":"List participants","description":"Organization-scoped participant read. Requires participants.read. Unknown or repeated query parameters are rejected. Contact data, birth dates and private notes are omitted. Linked profiles follow provider consent.","tags":["participants"],"x-required-scopes":["participants.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/list_participantsResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_list_participants","summary":"Check List participants","description":"Organization-scoped participant read. Requires participants.read. Unknown or repeated query parameters are rejected. Contact data, birth dates and private notes are omitted. Linked profiles follow provider consent. HEAD returns the same status and headers as GET with no response body.","tags":["participants"],"x-required-scopes":["participants.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/participants/{id}":{"get":{"operationId":"get_participant","summary":"Get participant","description":"Organization-scoped participant read. Requires participants.read. Unknown or repeated query parameters are rejected. Contact data, birth dates and private notes are omitted. Linked profiles follow provider consent.","tags":["participants"],"x-required-scopes":["participants.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_participantResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_get_participant","summary":"Check Get participant","description":"Organization-scoped participant read. Requires participants.read. Unknown or repeated query parameters are rejected. Contact data, birth dates and private notes are omitted. Linked profiles follow provider consent. HEAD returns the same status and headers as GET with no response body.","tags":["participants"],"x-required-scopes":["participants.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/enrollments":{"get":{"operationId":"list_enrollments","summary":"List enrollments","description":"Organization-scoped enrollment read. Requires enrollments.read. Unknown or repeated query parameters are rejected.","tags":["enrollments"],"x-required-scopes":["enrollments.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/list_enrollmentsResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_list_enrollments","summary":"Check List enrollments","description":"Organization-scoped enrollment read. Requires enrollments.read. Unknown or repeated query parameters are rejected. HEAD returns the same status and headers as GET with no response body.","tags":["enrollments"],"x-required-scopes":["enrollments.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/enrollments/{id}":{"get":{"operationId":"get_enrollment","summary":"Get enrollment","description":"Organization-scoped enrollment read. Requires enrollments.read. Unknown or repeated query parameters are rejected.","tags":["enrollments"],"x-required-scopes":["enrollments.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_enrollmentResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}},"head":{"operationId":"head_get_enrollment","summary":"Check Get enrollment","description":"Organization-scoped enrollment read. Requires enrollments.read. Unknown or repeated query parameters are rejected. HEAD returns the same status and headers as GET with no response body.","tags":["enrollments"],"x-required-scopes":["enrollments.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}}}},"/commands/create_enrollment":{"post":{"operationId":"create_enrollment","summary":"Create an enrollment","description":"Uses staff enrollment rules for capacity, waitlist, duplicates and participant access. Payment connection is not required. No forced status or capacity override. Strict JSON body; maximum 16,384 UTF-8 bytes. Unknown query parameters and request fields are rejected. Requires enrollments.write.","tags":["enrollments"],"x-required-scopes":["enrollments.write"],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/create_enrollmentRequest"}}}},"responses":{"201":{"description":"Enrollment created; replay preserves the original result and Location.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/create_enrollmentResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/cancel_enrollment":{"post":{"operationId":"cancel_enrollment","summary":"Cancel an enrollment","description":"May automatically promote a waitlisted participant and send domain notifications. Terminal-state cancellation is a no-op. Strict JSON body; maximum 16,384 UTF-8 bytes. Unknown query parameters and request fields are rejected. Requires enrollments.write.","tags":["enrollments"],"x-required-scopes":["enrollments.write"],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/cancel_enrollmentRequest"}}}},"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/cancel_enrollmentResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/preview_offering_schedule":{"post":{"operationId":"preview_offering_schedule","summary":"Preview additional offering dates","description":"Creates a durable preview expiring after 15 minutes. Appends 1–120 unique future same-day dates in an IANA timezone. Rejects invalid local times, overlaps and resource-assigned schedules. Does not replace, reschedule or cancel dates. Strict JSON body; maximum 16,384 UTF-8 bytes. Unknown query parameters and request fields are rejected. Requires schedule.preview.","tags":["sessions"],"x-required-scopes":["schedule.preview"],"x-mcp":{"expose":true,"readOnly":false,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/preview_offering_scheduleRequest"}}}},"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/preview_offering_scheduleResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/apply_offering_schedule":{"post":{"operationId":"apply_offering_schedule","summary":"Apply a reviewed schedule preview","description":"Requires the unexpired preview and approval token from the same organization and service token. Rejects changed schedule state. Atomically creates dates once. The approval token binds the preview; the integration must obtain operator approval. Strict JSON body; maximum 16,384 UTF-8 bytes. Unknown query parameters and request fields are rejected. Requires schedule.apply.","tags":["sessions"],"x-required-scopes":["schedule.apply"],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apply_offering_scheduleRequest"}}}},"responses":{"200":{"description":"Successful operation.","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/apply_offering_scheduleResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/jobs/{id}":{"get":{"operationId":"get_job_resource","summary":"Get asynchronous operation status and result; also requires the operation’s original scope.","description":"Get asynchronous operation status and result; also requires the operation’s original scope.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["organization.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"status":{"anyOf":[{"type":"string","const":"queued"},{"type":"string","const":"running"},{"type":"string","const":"complete"},{"type":"string","const":"failed"}]},"result":{"type":"object","additionalProperties":false,"properties":{"domain_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"hostname":{"type":"string"},"domain_status":{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"active"},{"type":"string","const":"disabled"}]},"delivered":{"type":"boolean"},"connected":{"type":"boolean"},"message":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"email"},"html":{"type":"string"},"subject":{"type":"string"},"text":{"type":"string"}},"required":["channel","html","subject","text"]},{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"sms"},"body":{"type":"string"}},"required":["channel","body"]},{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"push"},"body":{"type":"string"},"title":{"type":"string"}},"required":["channel","body","title"]}]},"source":{"anyOf":[{"type":"string","const":"system"},{"type":"string","const":"organization"}]},"version":{"type":"number"}},"required":[]},"error_code":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","status","created_at","updated_at"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1}}]},"head":{"operationId":"head_get_job_resource","summary":"Check Get asynchronous operation status and result; also requires the operation’s original scope.","description":"Get asynchronous operation status and result; also requires the operation’s original scope. HEAD returns the same status and headers as GET with no response body.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["organization.read"],"x-mcp":{"expose":false,"readOnly":true,"approval":"none"},"responses":{"200":{"description":"Successful read.","headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/Head400"},"401":{"$ref":"#/components/responses/Head401"},"403":{"$ref":"#/components/responses/Head403"},"404":{"$ref":"#/components/responses/Head404"},"405":{"$ref":"#/components/responses/Head405"},"409":{"$ref":"#/components/responses/Head409"},"413":{"$ref":"#/components/responses/Head413"},"415":{"$ref":"#/components/responses/Head415"},"429":{"$ref":"#/components/responses/Head429"},"500":{"$ref":"#/components/responses/Head500"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","minLength":1}}]}},"/commands/revoke_notification_suppression":{"post":{"operationId":"revoke_notification_suppression","summary":"Remove a recipient block after explicit confirmation; consent and preferences still apply.","description":"Remove a recipient block after explicit confirmation; consent and preferences still apply. Requires communications.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["communications.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean"},"suppression_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["confirmed","suppression_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"suppression_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["suppression_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/invite_staff":{"post":{"operationId":"invite_staff","summary":"Create a staff invitation and queue its email. The acceptance credential is never returned.","description":"Create a staff invitation and queue its email. The acceptance credential is never returned. Requires staff.invite. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["staff.invite"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"email":{"type":"string"},"role":{"anyOf":[{"type":"string","const":"admin"},{"type":"string","const":"staff"}]}},"required":["email","role"]}}}},"responses":{"202":{"description":"Work accepted; GET Location to monitor the job. Replay preserves the original acceptance.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"invitation_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["invitation_id","job_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/resend_staff_invitation":{"post":{"operationId":"resend_staff_invitation","summary":"Replace an invitation and queue its email.","description":"Replace an invitation and queue its email. Requires staff.invite. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["staff.invite"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"invitation_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["invitation_id"]}}}},"responses":{"202":{"description":"Work accepted; GET Location to monitor the job. Replay preserves the original acceptance.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"invitation_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["invitation_id","job_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/create_participant":{"post":{"operationId":"create_participant","summary":"Create a participant and optional household; queue new household access invitations.","description":"Create a participant and optional household; queue new household access invitations. Requires participants.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["participants.write"],"x-scope-rules":[{"scope":"participants.consent.write","condition":"participant_consent"}],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"given_name":{"type":"string"},"family_name":{"type":"string"},"date_of_birth":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"inactive"},{"type":"string","const":"archived"}]},"household_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"household_name":{"type":"string"},"household_member":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"relationship":{"type":"string"},"role":{"anyOf":[{"type":"string","const":"guardian"},{"type":"string","const":"emergency_contact"},{"type":"string","const":"billing_contact"},{"type":"string","const":"other"}]}},"required":[]},"consent_status":{"anyOf":[{"type":"string","const":"granted"},{"type":"string","const":"not_required"},{"type":"string","const":"pending"},{"type":"string","const":"revoked"}]},"external_reference":{"type":"string"},"participant_subject":{"anyOf":[{"type":"string","const":"account_holder"},{"type":"string","const":"other"}]},"provider_visibility":{"anyOf":[{"type":"string","const":"full_profile"},{"type":"string","const":"hidden"},{"type":"string","const":"limited_profile"}]}},"required":[]}}}},"responses":{"201":{"description":"Resource created; replay preserves the original result and Location.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true},"household_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"household_claim_invitation_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"household_member_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"participant_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"participant_organization_link_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["ok","participant_id","participant_organization_link_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/send_household_claim":{"post":{"operationId":"send_household_claim","summary":"Queue a household account invitation using recipient eligibility and resend limits.","description":"Queue a household account invitation using recipient eligibility and resend limits. Requires participants.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["participants.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"household_member_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["household_member_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"status":{"anyOf":[{"type":"string","const":"already_claimed"},{"type":"string","const":"queued"}]},"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["status"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"202":{"description":"Work accepted; GET Location to monitor the job. Replay preserves the original acceptance.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"status":{"anyOf":[{"type":"string","const":"already_claimed"},{"type":"string","const":"queued"}]},"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["status"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/request_custom_domain":{"post":{"operationId":"request_custom_domain","summary":"Request a custom domain; poll get_job and list_custom_domains for DNS verification.","description":"Request a custom domain; poll get_job and list_custom_domains for DNS verification. Requires domains.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["domains.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"hostname":{"type":"string"}},"required":["hostname"]}}}},"responses":{"202":{"description":"Work accepted; GET Location to monitor the job. Replay preserves the original acceptance.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["job_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/refresh_custom_domain":{"post":{"operationId":"refresh_custom_domain","summary":"Check custom domain verification and routing.","description":"Check custom domain verification and routing. Requires domains.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["domains.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"domain_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["domain_id"]}}}},"responses":{"202":{"description":"Work accepted; GET Location to monitor the job. Replay preserves the original acceptance.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["job_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/disable_custom_domain":{"post":{"operationId":"disable_custom_domain","summary":"Remove a custom domain from hosting and disable tenant routing.","description":"Remove a custom domain from hosting and disable tenant routing. Requires domains.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["domains.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"domain_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["domain_id"]}}}},"responses":{"202":{"description":"Work accepted; GET Location to monitor the job. Replay preserves the original acceptance.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["job_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/sync_payment_connection":{"post":{"operationId":"sync_payment_connection","summary":"Refresh the connected Stripe account capabilities.","description":"Refresh the connected Stripe account capabilities. Requires payments.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["payments.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"202":{"description":"Work accepted; GET Location to monitor the job. Replay preserves the original acceptance.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["job_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/disconnect_payment_connection":{"post":{"operationId":"disconnect_payment_connection","summary":"Close the connected Stripe account and disable online payments.","description":"Close the connected Stripe account and disable online payments. Requires payments.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["payments.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"202":{"description":"Work accepted; GET Location to monitor the job. Replay preserves the original acceptance.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["job_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/preview_notification_template":{"post":{"operationId":"preview_notification_template","summary":"Render the current notification template with sample content; poll get_job for the message.","description":"Render the current notification template with sample content; poll get_job for the message. Requires communications.read. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["communications.read"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"template_key":{"anyOf":[{"type":"string","const":"payment_account_paused"},{"type":"string","const":"payment_action_required"},{"type":"string","const":"sms_ready"},{"type":"string","const":"sms_rejected"},{"type":"string","const":"sms_suspended"},{"type":"string","const":"account_invite"},{"type":"string","const":"household_claim"},{"type":"string","const":"enrollment_confirmation"},{"type":"string","const":"invoice_issued"},{"type":"string","const":"waitlist_change"}]}},"required":["channel","template_key"]}}}},"responses":{"202":{"description":"Work accepted; GET Location to monitor the job. Replay preserves the original acceptance.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["job_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/assign_action":{"post":{"operationId":"assign_action","summary":"Assign or unassign organization work to an active staff member.","description":"Assign or unassign organization work to an active staff member. Requires operations.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["operations.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"action_key":{"type":"string"},"assigned_user_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["action_key"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"null"},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/snooze_action":{"post":{"operationId":"snooze_action","summary":"Snooze organization work for up to 30 days, or clear its snooze.","description":"Snooze organization work for up to 30 days, or clear its snooze. Requires operations.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["operations.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"action_key":{"type":"string"},"until":{"type":"string","format":"date-time"}},"required":["action_key"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"null"},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/dry_run_import":{"post":{"operationId":"dry_run_import","summary":"Validate a batch of parsed CSV rows without applying changes.","description":"Validate a batch of parsed CSV rows without applying changes. Requires imports.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":524288,"x-required-scopes":["imports.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"kind":{"anyOf":[{"type":"string","const":"households"},{"type":"string","const":"participants"},{"type":"string","const":"programs"},{"type":"string","const":"offerings"},{"type":"string","const":"sessions"},{"type":"string","const":"enrollments"}]},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"row_number":{"type":"number"},"values":{"type":"object","additionalProperties":{"type":"string"}}},"required":["row_number","values"]}}},"required":["kind","rows"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"batch_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"created_records":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"row_number":{"type":"number"},"table":{"type":"string"}},"required":["id","row_number","table"]}},"dry_run":{"type":"boolean"},"issues":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string"},"field":{"type":"string"},"message":{"type":"string"},"row_number":{"type":"number"},"severity":{"anyOf":[{"type":"string","const":"error"},{"type":"string","const":"warning"}]}},"required":["code","message","row_number","severity"]}},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"action":{"anyOf":[{"type":"string","const":"create"},{"type":"string","const":"skip"},{"type":"string","const":"update"},{"type":"string","const":"use_existing"}]},"label":{"type":"string"},"row_number":{"type":"number"},"target":{"type":"string"}},"required":["action","label","row_number","target"]}},"summary":{"type":"object","additionalProperties":false,"properties":{"error_count":{"type":"number"},"failure_count":{"type":"number"},"row_count":{"type":"number"},"skipped_count":{"type":"number"},"success_count":{"type":"number"},"warning_count":{"type":"number"}},"required":["error_count","failure_count","row_count","skipped_count","success_count","warning_count"]}},"required":["created_records","dry_run","issues","rows","summary"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/apply_import":{"post":{"operationId":"apply_import","summary":"Apply a validated batch of parsed CSV rows; inspect returned row issues and batch status.","description":"Apply a validated batch of parsed CSV rows; inspect returned row issues and batch status. Requires imports.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":524288,"x-required-scopes":["imports.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"kind":{"anyOf":[{"type":"string","const":"households"},{"type":"string","const":"participants"},{"type":"string","const":"programs"},{"type":"string","const":"offerings"},{"type":"string","const":"sessions"},{"type":"string","const":"enrollments"}]},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"row_number":{"type":"number"},"values":{"type":"object","additionalProperties":{"type":"string"}}},"required":["row_number","values"]}},"source_filename":{"type":"string"}},"required":["kind","rows"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"batch_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"created_records":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"row_number":{"type":"number"},"table":{"type":"string"}},"required":["id","row_number","table"]}},"dry_run":{"type":"boolean"},"issues":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string"},"field":{"type":"string"},"message":{"type":"string"},"row_number":{"type":"number"},"severity":{"anyOf":[{"type":"string","const":"error"},{"type":"string","const":"warning"}]}},"required":["code","message","row_number","severity"]}},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"action":{"anyOf":[{"type":"string","const":"create"},{"type":"string","const":"skip"},{"type":"string","const":"update"},{"type":"string","const":"use_existing"}]},"label":{"type":"string"},"row_number":{"type":"number"},"target":{"type":"string"}},"required":["action","label","row_number","target"]}},"summary":{"type":"object","additionalProperties":false,"properties":{"error_count":{"type":"number"},"failure_count":{"type":"number"},"row_count":{"type":"number"},"skipped_count":{"type":"number"},"success_count":{"type":"number"},"warning_count":{"type":"number"}},"required":["error_count","failure_count","row_count","skipped_count","success_count","warning_count"]}},"required":["created_records","dry_run","issues","rows","summary"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/request_report":{"post":{"operationId":"request_report","summary":"Start a report job; poll get_report, then paginate get_report_rows.","description":"Start a report job; poll get_report, then paginate get_report_rows. Requires reports.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["reports.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"refresh_key":{"type":"string"}},"required":[]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/update_staff_role":{"post":{"operationId":"update_staff_role","summary":"Change a non-owner staff membership role. Owner access requires a human owner.","description":"Change a non-owner staff membership role. Owner access requires a human owner. Requires staff.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["staff.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"membership_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"role":{"anyOf":[{"type":"string","const":"owner"},{"type":"string","const":"admin"},{"type":"string","const":"staff"},{"type":"string","const":"instructor"}]}},"required":["membership_id","role"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/update_staff_status":{"post":{"operationId":"update_staff_status","summary":"Activate or remove a non-owner membership. Organization credentials survive creator removal.","description":"Activate or remove a non-owner membership. Organization credentials survive creator removal. Requires staff.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["staff.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"membership_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"removed"}]}},"required":["membership_id","status"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/revoke_staff_invitation":{"post":{"operationId":"revoke_staff_invitation","summary":"Revoke a pending staff invitation.","description":"Revoke a pending staff invitation. Requires staff.invite. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["staff.invite"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"invitation_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["invitation_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/update_organization_profile":{"post":{"operationId":"update_organization_profile","summary":"Update organization profile and slug.","description":"Update organization profile and slug. Requires settings.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["settings.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"slug":{"type":"string"}},"required":["name","slug"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"organization_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"slug":{"type":"string"}},"required":["name","organization_id","slug"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/update_participant":{"post":{"operationId":"update_participant","summary":"Update a participant profile, household association and provider consent.","description":"Update a participant profile, household association and provider consent. Requires participants.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["participants.write"],"x-scope-rules":[{"scope":"participants.consent.write","condition":"participant_consent"}],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"participant_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"display_name":{"type":"string"},"given_name":{"type":"string"},"family_name":{"type":"string"},"date_of_birth":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"inactive"},{"type":"string","const":"archived"}]},"household_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"household_name":{"type":"string"},"household_member":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"relationship":{"type":"string"},"role":{"anyOf":[{"type":"string","const":"guardian"},{"type":"string","const":"emergency_contact"},{"type":"string","const":"billing_contact"},{"type":"string","const":"other"}]}},"required":[]},"consent_status":{"anyOf":[{"type":"string","const":"granted"},{"type":"string","const":"not_required"},{"type":"string","const":"pending"},{"type":"string","const":"revoked"}]},"external_reference":{"type":"string"},"link_status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"revoked"}]},"notes":{"type":"string"},"provider_visibility":{"anyOf":[{"type":"string","const":"full_profile"},{"type":"string","const":"hidden"},{"type":"string","const":"limited_profile"}]}},"required":["participant_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true},"household_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"household_member_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"participant_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"participant_organization_link_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["ok","participant_id","participant_organization_link_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/create_session":{"post":{"operationId":"create_session","summary":"Create a scheduled class date.","description":"Create a scheduled class date. Requires schedule.apply. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.apply"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"}}}}}},"responses":{"201":{"description":"Resource created; replay preserves the original result and Location.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["ok","session_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/preview_create_session":{"post":{"operationId":"preview_create_session","summary":"Preview: Create a scheduled class date.","description":"Validate the entire command without committing its domain effects. Returns reviewed input and change counts; approval expires in 15 minutes. Requires schedule.preview and non-apply scopes of the target command.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.preview"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"capacity":{"type":"number"},"ends_at":{"type":"string","format":"date-time"},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"resource_ids":{"type":"array","items":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"starts_at":{"type":"string","format":"date-time"},"timezone":{"type":"string"}},"required":["ends_at","offering_id","starts_at"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token","organization_id","expires_at","requires_approval","changes","proposed_input"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"},"organization_id":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"requires_approval":{"type":"boolean","const":true},"changes":{"type":"object","additionalProperties":false,"required":["created","updated","deleted"],"properties":{"created":{"type":"integer"},"updated":{"type":"integer"},"deleted":{"type":"integer"}}},"proposed_input":{"type":"object","additionalProperties":false,"properties":{"capacity":{"type":"number"},"ends_at":{"type":"string","format":"date-time"},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"resource_ids":{"type":"array","items":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"starts_at":{"type":"string","format":"date-time"},"timezone":{"type":"string"}},"required":["ends_at","offering_id","starts_at"]}}},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/update_session":{"post":{"operationId":"update_session","summary":"Change a class date and its resource assignments.","description":"Change a class date and its resource assignments. Requires schedule.apply. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.apply"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"}}}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/preview_update_session":{"post":{"operationId":"preview_update_session","summary":"Preview: Change a class date and its resource assignments.","description":"Validate the entire command without committing its domain effects. Returns reviewed input and change counts; approval expires in 15 minutes. Requires schedule.preview and non-apply scopes of the target command.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.preview"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"capacity":{"anyOf":[{"type":"number"},{"type":"null"}]},"cancel_reason":{"type":"string"},"ends_at":{"type":"string","format":"date-time"},"location_id":{"anyOf":[{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},{"type":"null"}]},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"resource_ids":{"type":"array","items":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"starts_at":{"type":"string","format":"date-time"},"status":{"anyOf":[{"type":"string","const":"scheduled"},{"type":"string","const":"cancelled"},{"type":"string","const":"completed"},{"type":"string","const":"rescheduled"}]},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["session_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token","organization_id","expires_at","requires_approval","changes","proposed_input"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"},"organization_id":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"requires_approval":{"type":"boolean","const":true},"changes":{"type":"object","additionalProperties":false,"required":["created","updated","deleted"],"properties":{"created":{"type":"integer"},"updated":{"type":"integer"},"deleted":{"type":"integer"}}},"proposed_input":{"type":"object","additionalProperties":false,"properties":{"capacity":{"anyOf":[{"type":"number"},{"type":"null"}]},"cancel_reason":{"type":"string"},"ends_at":{"type":"string","format":"date-time"},"location_id":{"anyOf":[{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},{"type":"null"}]},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"resource_ids":{"type":"array","items":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"starts_at":{"type":"string","format":"date-time"},"status":{"anyOf":[{"type":"string","const":"scheduled"},{"type":"string","const":"cancelled"},{"type":"string","const":"completed"},{"type":"string","const":"rescheduled"}]},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["session_id"]}}},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/cancel_session":{"post":{"operationId":"cancel_session","summary":"Cancel a class date and release its resources.","description":"Cancel a class date and release its resources. Requires schedule.apply. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.apply"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"}}}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/preview_cancel_session":{"post":{"operationId":"preview_cancel_session","summary":"Preview: Cancel a class date and release its resources.","description":"Validate the entire command without committing its domain effects. Returns reviewed input and change counts; approval expires in 15 minutes. Requires schedule.preview and non-apply scopes of the target command.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.preview"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"cancel_reason":{"type":"string"},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["session_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token","organization_id","expires_at","requires_approval","changes","proposed_input"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"},"organization_id":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"requires_approval":{"type":"boolean","const":true},"changes":{"type":"object","additionalProperties":false,"required":["created","updated","deleted"],"properties":{"created":{"type":"integer"},"updated":{"type":"integer"},"deleted":{"type":"integer"}}},"proposed_input":{"type":"object","additionalProperties":false,"properties":{"cancel_reason":{"type":"string"},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["session_id"]}}},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/replace_offering_schedule":{"post":{"operationId":"replace_offering_schedule","summary":"Replace the future schedule with reviewed dates and recurring rules.","description":"Replace the future schedule with reviewed dates and recurring rules. Requires schedule.apply. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.apply"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"}}}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"cancelled_count":{"type":"number"},"created_count":{"type":"number"},"ok":{"type":"boolean","const":true},"protected_changed_count":{"type":"number"},"updated_count":{"type":"number"}},"required":["cancelled_count","created_count","ok","protected_changed_count","updated_count"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/preview_replace_offering_schedule":{"post":{"operationId":"preview_replace_offering_schedule","summary":"Preview: Replace the future schedule with reviewed dates and recurring rules.","description":"Validate the entire command without committing its domain effects. Returns reviewed input and change counts; approval expires in 15 minutes. Requires schedule.preview and non-apply scopes of the target command.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.preview"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"allow_protected_changes":{"type":"boolean"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"recurring_schedule_rules":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"days_of_week":{"type":"array","items":{"anyOf":[{"type":"string","const":"monday"},{"type":"string","const":"tuesday"},{"type":"string","const":"wednesday"},{"type":"string","const":"thursday"},{"type":"string","const":"friday"},{"type":"string","const":"saturday"},{"type":"string","const":"sunday"}]}},"duration_minutes":{"type":"number"},"end_date":{"type":"string"},"interval_weeks":{"type":"number"},"local_start_time":{"type":"string"},"start_date":{"type":"string"}},"required":["days_of_week","duration_minutes","end_date","local_start_time","start_date"]}},"regenerate_rules":{"type":"boolean"},"schedule_sessions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"ends_at":{"type":"string","format":"date-time"},"local_date":{"type":"string"},"local_end_time":{"type":"string"},"local_start_time":{"type":"string"},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"source":{"anyOf":[{"type":"string","const":"custom"},{"type":"string","const":"existing"},{"type":"string","const":"generated"}]},"starts_at":{"type":"string","format":"date-time"},"timezone":{"type":"string"}},"required":["ends_at","local_date","local_end_time","local_start_time","starts_at"]}},"timezone":{"type":"string"}},"required":["offering_id","schedule_sessions","timezone"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token","organization_id","expires_at","requires_approval","changes","proposed_input"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"},"organization_id":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"requires_approval":{"type":"boolean","const":true},"changes":{"type":"object","additionalProperties":false,"required":["created","updated","deleted"],"properties":{"created":{"type":"integer"},"updated":{"type":"integer"},"deleted":{"type":"integer"}}},"proposed_input":{"type":"object","additionalProperties":false,"properties":{"allow_protected_changes":{"type":"boolean"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"recurring_schedule_rules":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"days_of_week":{"type":"array","items":{"anyOf":[{"type":"string","const":"monday"},{"type":"string","const":"tuesday"},{"type":"string","const":"wednesday"},{"type":"string","const":"thursday"},{"type":"string","const":"friday"},{"type":"string","const":"saturday"},{"type":"string","const":"sunday"}]}},"duration_minutes":{"type":"number"},"end_date":{"type":"string"},"interval_weeks":{"type":"number"},"local_start_time":{"type":"string"},"start_date":{"type":"string"}},"required":["days_of_week","duration_minutes","end_date","local_start_time","start_date"]}},"regenerate_rules":{"type":"boolean"},"schedule_sessions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"ends_at":{"type":"string","format":"date-time"},"local_date":{"type":"string"},"local_end_time":{"type":"string"},"local_start_time":{"type":"string"},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"source":{"anyOf":[{"type":"string","const":"custom"},{"type":"string","const":"existing"},{"type":"string","const":"generated"}]},"starts_at":{"type":"string","format":"date-time"},"timezone":{"type":"string"}},"required":["ends_at","local_date","local_end_time","local_start_time","starts_at"]}},"timezone":{"type":"string"}},"required":["offering_id","schedule_sessions","timezone"]}}},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/update_recurring_schedule_rule":{"post":{"operationId":"update_recurring_schedule_rule","summary":"Update a recurring rule and reconcile future class dates.","description":"Update a recurring rule and reconcile future class dates. Requires schedule.apply. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.apply"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"}}}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true},"session_count":{"type":"number"}},"required":["ok","session_count"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/preview_update_recurring_schedule_rule":{"post":{"operationId":"preview_update_recurring_schedule_rule","summary":"Preview: Update a recurring rule and reconcile future class dates.","description":"Validate the entire command without committing its domain effects. Returns reviewed input and change counts; approval expires in 15 minutes. Requires schedule.preview and non-apply scopes of the target command.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.preview"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"days_of_week":{"type":"array","items":{"anyOf":[{"type":"string","const":"monday"},{"type":"string","const":"tuesday"},{"type":"string","const":"wednesday"},{"type":"string","const":"thursday"},{"type":"string","const":"friday"},{"type":"string","const":"saturday"},{"type":"string","const":"sunday"}]}},"duration_minutes":{"type":"number"},"end_date":{"type":"string"},"interval_weeks":{"type":"number"},"local_start_time":{"type":"string"},"schedule_rule_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"start_date":{"type":"string"}},"required":["days_of_week","duration_minutes","end_date","local_start_time","schedule_rule_id","start_date"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token","organization_id","expires_at","requires_approval","changes","proposed_input"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"},"organization_id":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"requires_approval":{"type":"boolean","const":true},"changes":{"type":"object","additionalProperties":false,"required":["created","updated","deleted"],"properties":{"created":{"type":"integer"},"updated":{"type":"integer"},"deleted":{"type":"integer"}}},"proposed_input":{"type":"object","additionalProperties":false,"properties":{"days_of_week":{"type":"array","items":{"anyOf":[{"type":"string","const":"monday"},{"type":"string","const":"tuesday"},{"type":"string","const":"wednesday"},{"type":"string","const":"thursday"},{"type":"string","const":"friday"},{"type":"string","const":"saturday"},{"type":"string","const":"sunday"}]}},"duration_minutes":{"type":"number"},"end_date":{"type":"string"},"interval_weeks":{"type":"number"},"local_start_time":{"type":"string"},"schedule_rule_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"start_date":{"type":"string"}},"required":["days_of_week","duration_minutes","end_date","local_start_time","schedule_rule_id","start_date"]}}},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/promote_waitlist":{"post":{"operationId":"promote_waitlist","summary":"Promote the next eligible waitlisted enrollment when capacity permits.","description":"Promote the next eligible waitlisted enrollment when capacity permits. Requires enrollments.override. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["enrollments.override"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["offering_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true},"promoted_enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/transfer_enrollment":{"post":{"operationId":"transfer_enrollment","summary":"Transfer an enrollment to another offering or class date.","description":"Transfer an enrollment to another offering or class date. Requires enrollments.override. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["enrollments.override"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"target_offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"target_session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["enrollment_id","target_offering_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"new_enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"ok":{"type":"boolean","const":true},"released_whole_offering":{"type":"boolean"},"status":{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"confirmed"},{"type":"string","const":"waitlisted"},{"type":"string","const":"canceled"},{"type":"string","const":"transferred"},{"type":"string","const":"completed"}]}},"required":["new_enrollment_id","ok","released_whole_offering","status"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/publish_notification_template":{"post":{"operationId":"publish_notification_template","summary":"Publish an organization notification template.","description":"Publish an organization notification template. Requires communications.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["communications.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"content":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"email"},"body_text":{"type":"string"},"cta_label":{"type":"string"},"footnote":{"type":"string"},"heading":{"type":"string"},"highlight":{"type":"string"},"preview_text":{"type":"string"},"subject":{"type":"string"}},"required":["channel"]},{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"sms"},"body":{"type":"string"}},"required":["channel"]},{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"push"},"body":{"type":"string"},"title":{"type":"string"}},"required":["channel"]}]},"template_key":{"anyOf":[{"type":"string","const":"payment_account_paused"},{"type":"string","const":"payment_action_required"},{"type":"string","const":"sms_ready"},{"type":"string","const":"sms_rejected"},{"type":"string","const":"sms_suspended"},{"type":"string","const":"account_invite"},{"type":"string","const":"household_claim"},{"type":"string","const":"enrollment_confirmation"},{"type":"string","const":"invoice_issued"},{"type":"string","const":"waitlist_change"}]},"name":{"type":"string"}},"required":["channel","content","template_key"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"template_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"version":{"type":"number"}},"required":["template_id","version"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/reset_notification_template":{"post":{"operationId":"reset_notification_template","summary":"Reset a notification template to its system default.","description":"Reset a notification template to its system default. Requires communications.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["communications.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"template_key":{"anyOf":[{"type":"string","const":"payment_account_paused"},{"type":"string","const":"payment_action_required"},{"type":"string","const":"sms_ready"},{"type":"string","const":"sms_rejected"},{"type":"string","const":"sms_suspended"},{"type":"string","const":"account_invite"},{"type":"string","const":"household_claim"},{"type":"string","const":"enrollment_confirmation"},{"type":"string","const":"invoice_issued"},{"type":"string","const":"waitlist_change"}]}},"required":["channel","template_key"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"archived":{"type":"number"}},"required":["archived"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/suppress_email_recipient":{"post":{"operationId":"suppress_email_recipient","summary":"Suppress email delivery to an organization recipient.","description":"Suppress email delivery to an organization recipient. Requires communications.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["communications.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"email":{"type":"string"},"reason":{"anyOf":[{"type":"string","const":"hard_bounce"},{"type":"string","const":"complaint"},{"type":"string","const":"unsubscribe"},{"type":"string","const":"manual"},{"type":"string","const":"operational"}]},"scope":{"anyOf":[{"type":"string","const":"all"},{"type":"string","const":"marketing"},{"type":"string","const":"transactional"}]},"source_attempt_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"source_event_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["email","reason","scope"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"suppression_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["suppression_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/set_notification_preference":{"post":{"operationId":"set_notification_preference","summary":"Set an organization notification preference.","description":"Set an organization notification preference. Requires communications.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["communications.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"category":{"anyOf":[{"type":"string","const":"transactional"},{"type":"string","const":"schedule_change"},{"type":"string","const":"marketing"},{"type":"string","const":"progress"},{"type":"string","const":"billing"}]},"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"enabled":{"type":"boolean"},"household_member_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"subject_type":{"anyOf":[{"type":"string","const":"organization"},{"type":"string","const":"user"},{"type":"string","const":"household_member"}]},"user_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["category","channel","enabled","subject_type"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"preference_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["preference_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/record_notification_consent":{"post":{"operationId":"record_notification_consent","summary":"Record evidence of recipient notification consent.","description":"Record evidence of recipient notification consent. Requires communications.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["communications.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"recipient_key":{"type":"string"},"scope":{"anyOf":[{"type":"string","const":"all"},{"type":"string","const":"marketing"},{"type":"string","const":"transactional"}]},"source":{"anyOf":[{"type":"string","const":"account_settings"},{"type":"string","const":"admin"},{"type":"string","const":"import"},{"type":"string","const":"signup"},{"type":"string","const":"unsubscribe"},{"type":"string","const":"provider_webhook"}]},"status":{"anyOf":[{"type":"string","const":"granted"},{"type":"string","const":"revoked"}]}},"required":["channel","recipient_key","scope","source","status"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"consent_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["consent_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/set_notification_suppression":{"post":{"operationId":"set_notification_suppression","summary":"Update recipient notification suppression.","description":"Update recipient notification suppression. Requires communications.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["communications.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"reason":{"anyOf":[{"type":"string","const":"hard_bounce"},{"type":"string","const":"complaint"},{"type":"string","const":"unsubscribe"},{"type":"string","const":"manual"},{"type":"string","const":"operational"}]},"recipient_key":{"type":"string"},"scope":{"anyOf":[{"type":"string","const":"all"},{"type":"string","const":"marketing"},{"type":"string","const":"transactional"}]},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"revoked"}]}},"required":["channel","reason","recipient_key","scope","status"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"suppression_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["suppression_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/record_offline_payment":{"post":{"operationId":"record_offline_payment","summary":"Record a payment collected outside the payment provider.","description":"Record a payment collected outside the payment provider. Requires payments.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["payments.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"currency":{"type":"string"},"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"method":{"anyOf":[{"type":"string","const":"cash"},{"type":"string","const":"check"},{"type":"string","const":"external_card"},{"type":"string","const":"other"}]},"occurred_at":{"type":"string","format":"date-time"}},"required":["amount_minor","currency","enrollment_id","method"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/void_offline_payment":{"post":{"operationId":"void_offline_payment","summary":"Void an incorrectly recorded offline payment.","description":"Void an incorrectly recorded offline payment. Requires payments.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["payments.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"payment_record_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"reason_code":{"type":"string"}},"required":["payment_record_id","reason_code"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/record_offline_refund":{"post":{"operationId":"record_offline_refund","summary":"Record an offline refund without exceeding the refundable balance.","description":"Record an offline refund without exceeding the refundable balance. Requires payments.refund. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["payments.refund"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"method":{"anyOf":[{"type":"string","const":"original_method"},{"type":"string","const":"cash"},{"type":"string","const":"check"},{"type":"string","const":"other"}]},"payment_record_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"reason_code":{"anyOf":[{"type":"string","const":"requested_by_customer"},{"type":"string","const":"duplicate"},{"type":"string","const":"fraudulent"},{"type":"string","const":"enrollment_canceled"},{"type":"string","const":"overpayment"},{"type":"string","const":"other"}]}},"required":["amount_minor","method","payment_record_id","reason_code"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/reconcile_provider_state":{"post":{"operationId":"reconcile_provider_state","summary":"Record review of a payment provider state discrepancy.","description":"Record review of a payment provider state discrepancy. Requires payments.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["payments.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"evidence_reference":{"type":"string"},"provider_object_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"reason_code":{"type":"string"},"reconciliation_state":{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"matched"},{"type":"string","const":"needs_review"},{"type":"string","const":"reconciled"}]}},"required":["provider_object_id","reason_code","reconciliation_state"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/create_program":{"post":{"operationId":"create_program","summary":"Create a program.","description":"Create a program. Requires catalog.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["catalog.write"],"x-scope-rules":[{"scope":"catalog.publish","condition":"published_status"}],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"description":{"type":"string"},"family_info":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]}},"required":["name"]}}}},"responses":{"201":{"description":"Resource created; replay preserves the original result and Location.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["ok","program_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/update_program":{"post":{"operationId":"update_program","summary":"Update program details or status.","description":"Update program details or status. Requires catalog.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["catalog.write","catalog.publish"],"x-scope-rules":[{"scope":"catalog.publish","condition":"always"}],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"description":{"type":"string"},"family_info":{"type":"string"},"name":{"type":"string"},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]}},"required":["program_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/archive_program":{"post":{"operationId":"archive_program","summary":"Archive a program after its current offerings are archived.","description":"Archive a program after its current offerings are archived. Requires catalog.publish. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["catalog.publish"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["program_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/create_offering":{"post":{"operationId":"create_offering","summary":"Create an offering with validated commercial terms and optional initial schedule.","description":"Create an offering with validated commercial terms and optional initial schedule. Requires catalog.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["catalog.write"],"x-scope-rules":[{"scope":"catalog.publish","condition":"published_status"},{"scope":"catalog.publish","condition":"new_program"},{"scope":"schedule.apply","condition":"schedule"}],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"}}}}}},"responses":{"201":{"description":"Resource created; replay preserves the original result and Location.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"ok":{"type":"boolean","const":true},"program_created":{"type":"boolean"},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"session_count":{"type":"number"}},"required":["offering_id","ok","program_created","program_id","session_count"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Location":{"required":true,"schema":{"type":"string","format":"uri-reference"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/preview_create_offering":{"post":{"operationId":"preview_create_offering","summary":"Preview: Create an offering with validated commercial terms and optional initial schedule.","description":"Validate the entire command without committing its domain effects. Returns reviewed input and change counts; approval expires in 15 minutes. Requires schedule.preview and non-apply scopes of the target command.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.preview","catalog.write"],"x-scope-rules":[{"scope":"catalog.publish","condition":"published_status"},{"scope":"catalog.publish","condition":"new_program"}],"x-mcp":{"expose":true,"readOnly":false,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"accepted_payment_methods":{"type":"array","items":{"anyOf":[{"type":"string","const":"cash"},{"type":"string","const":"check"},{"type":"string","const":"external_card"},{"type":"string","const":"stripe"},{"type":"string","const":"other"}]}},"capacity":{"type":"number"},"description":{"type":"string"},"family_info":{"type":"string"},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"new_program_name":{"type":"string"},"payment_collection_mode":{"anyOf":[{"type":"string","const":"none"},{"type":"string","const":"optional"},{"type":"string","const":"required"}]},"price_amount_minor":{"type":"number"},"price_currency":{"type":"string"},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"recurring_schedule_rules":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"days_of_week":{"type":"array","items":{"anyOf":[{"type":"string","const":"monday"},{"type":"string","const":"tuesday"},{"type":"string","const":"wednesday"},{"type":"string","const":"thursday"},{"type":"string","const":"friday"},{"type":"string","const":"saturday"},{"type":"string","const":"sunday"}]}},"duration_minutes":{"type":"number"},"end_date":{"type":"string"},"interval_weeks":{"type":"number"},"local_start_time":{"type":"string"},"start_date":{"type":"string"}},"required":["days_of_week","duration_minutes","end_date","local_start_time","start_date"]}},"schedule_sessions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"ends_at":{"type":"string","format":"date-time"},"local_date":{"type":"string"},"local_end_time":{"type":"string"},"local_start_time":{"type":"string"},"starts_at":{"type":"string","format":"date-time"}},"required":["ends_at","local_date","local_end_time","local_start_time","starts_at"]}},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"term_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"timezone":{"type":"string"}},"required":["name"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token","organization_id","expires_at","requires_approval","changes","proposed_input"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"},"organization_id":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"requires_approval":{"type":"boolean","const":true},"changes":{"type":"object","additionalProperties":false,"required":["created","updated","deleted"],"properties":{"created":{"type":"integer"},"updated":{"type":"integer"},"deleted":{"type":"integer"}}},"proposed_input":{"type":"object","additionalProperties":false,"properties":{"accepted_payment_methods":{"type":"array","items":{"anyOf":[{"type":"string","const":"cash"},{"type":"string","const":"check"},{"type":"string","const":"external_card"},{"type":"string","const":"stripe"},{"type":"string","const":"other"}]}},"capacity":{"type":"number"},"description":{"type":"string"},"family_info":{"type":"string"},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"new_program_name":{"type":"string"},"payment_collection_mode":{"anyOf":[{"type":"string","const":"none"},{"type":"string","const":"optional"},{"type":"string","const":"required"}]},"price_amount_minor":{"type":"number"},"price_currency":{"type":"string"},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"recurring_schedule_rules":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"days_of_week":{"type":"array","items":{"anyOf":[{"type":"string","const":"monday"},{"type":"string","const":"tuesday"},{"type":"string","const":"wednesday"},{"type":"string","const":"thursday"},{"type":"string","const":"friday"},{"type":"string","const":"saturday"},{"type":"string","const":"sunday"}]}},"duration_minutes":{"type":"number"},"end_date":{"type":"string"},"interval_weeks":{"type":"number"},"local_start_time":{"type":"string"},"start_date":{"type":"string"}},"required":["days_of_week","duration_minutes","end_date","local_start_time","start_date"]}},"schedule_sessions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"ends_at":{"type":"string","format":"date-time"},"local_date":{"type":"string"},"local_end_time":{"type":"string"},"local_start_time":{"type":"string"},"starts_at":{"type":"string","format":"date-time"}},"required":["ends_at","local_date","local_end_time","local_start_time","starts_at"]}},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"term_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"timezone":{"type":"string"}},"required":["name"]}}},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/update_offering":{"post":{"operationId":"update_offering","summary":"Update an offering's details, location, capacity, commercial terms or status after reviewing a preview.","description":"Update an offering's details, location, capacity, commercial terms or status after reviewing a preview. Requires catalog.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["catalog.write","catalog.publish"],"x-scope-rules":[{"scope":"catalog.publish","condition":"always"},{"scope":"schedule.apply","condition":"term_assignment"}],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"}}}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/preview_update_offering":{"post":{"operationId":"preview_update_offering","summary":"Preview: Update an offering's details, location, capacity, commercial terms or status after reviewing a preview.","description":"Validate the entire command without committing its domain effects. Returns reviewed input and change counts; approval expires in 15 minutes. Requires schedule.preview and non-apply scopes of the target command.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["schedule.preview","catalog.write","catalog.publish"],"x-scope-rules":[{"scope":"catalog.publish","condition":"always"}],"x-mcp":{"expose":true,"readOnly":false,"approval":"none"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"accepted_payment_methods":{"type":"array","items":{"anyOf":[{"type":"string","const":"cash"},{"type":"string","const":"check"},{"type":"string","const":"external_card"},{"type":"string","const":"stripe"},{"type":"string","const":"other"}]}},"capacity":{"anyOf":[{"type":"number"},{"type":"null"}]},"description":{"type":"string"},"family_info":{"type":"string"},"location_id":{"anyOf":[{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},{"type":"null"}]},"name":{"type":"string"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"payment_collection_mode":{"anyOf":[{"type":"string","const":"none"},{"type":"string","const":"optional"},{"type":"string","const":"required"}]},"price_amount_minor":{"anyOf":[{"type":"number"},{"type":"null"}]},"price_currency":{"anyOf":[{"type":"string"},{"type":"null"}]},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"term_id":{"anyOf":[{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},{"type":"null"}]}},"required":["offering_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"required":["preview_id","approval_token","organization_id","expires_at","requires_approval","changes","proposed_input"],"properties":{"preview_id":{"type":"string"},"approval_token":{"type":"string"},"organization_id":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"requires_approval":{"type":"boolean","const":true},"changes":{"type":"object","additionalProperties":false,"required":["created","updated","deleted"],"properties":{"created":{"type":"integer"},"updated":{"type":"integer"},"deleted":{"type":"integer"}}},"proposed_input":{"type":"object","additionalProperties":false,"properties":{"accepted_payment_methods":{"type":"array","items":{"anyOf":[{"type":"string","const":"cash"},{"type":"string","const":"check"},{"type":"string","const":"external_card"},{"type":"string","const":"stripe"},{"type":"string","const":"other"}]}},"capacity":{"anyOf":[{"type":"number"},{"type":"null"}]},"description":{"type":"string"},"family_info":{"type":"string"},"location_id":{"anyOf":[{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},{"type":"null"}]},"name":{"type":"string"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"payment_collection_mode":{"anyOf":[{"type":"string","const":"none"},{"type":"string","const":"optional"},{"type":"string","const":"required"}]},"price_amount_minor":{"anyOf":[{"type":"number"},{"type":"null"}]},"price_currency":{"anyOf":[{"type":"string"},{"type":"null"}]},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"term_id":{"anyOf":[{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},{"type":"null"}]}},"required":["offering_id"]}}},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/archive_offering":{"post":{"operationId":"archive_offering","summary":"Archive an offering.","description":"Archive an offering. Requires catalog.publish. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["catalog.publish"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["offering_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/update_organization_settings":{"post":{"operationId":"update_organization_settings","summary":"Update organization profile, timezone and operating defaults.","description":"Update organization profile, timezone and operating defaults. Requires settings.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["settings.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"booking_increment_minutes":{"type":"number"},"default_capacity":{"type":"number"},"default_duration_minutes":{"type":"number"},"enrollment_confirmations":{"type":"boolean"},"name":{"type":"string"},"payment_instructions":{"type":"string"},"slug":{"type":"string"},"timezone":{"type":"string"},"waitlist_updates":{"type":"boolean"}},"required":["enrollment_confirmations","name","slug","timezone","waitlist_updates"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true},"slug":{"type":"string"}},"required":["ok","slug"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/upsert_location":{"post":{"operationId":"upsert_location","summary":"Create or update a location.","description":"Create or update a location. Requires locations.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["locations.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"address_line1":{"type":"string"},"address_line2":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"kind":{"anyOf":[{"type":"string","const":"facility"},{"type":"string","const":"room"},{"type":"string","const":"pool"},{"type":"string","const":"court"},{"type":"string","const":"field"},{"type":"string","const":"virtual"},{"type":"string","const":"other"}]},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"postal_code":{"type":"string"},"region":{"type":"string"},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"timezone":{"type":"string"}},"required":["kind","name","status"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/upsert_resource":{"post":{"operationId":"upsert_resource","summary":"Create or update an organization resource.","description":"Create or update an organization resource. Requires resources.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["resources.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"capacity":{"type":"number"},"kind":{"anyOf":[{"type":"string","const":"person"},{"type":"string","const":"space"},{"type":"string","const":"equipment"},{"type":"string","const":"other"}]},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"resource_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]}},"required":["kind","name","status"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/mark_attendance":{"post":{"operationId":"mark_attendance","summary":"Record attendance for an enrollment or makeup participant.","description":"Record attendance for an enrollment or makeup participant. Requires attendance.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["attendance.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"makeup_credit_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"notes":{"type":"string"},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"status":{"anyOf":[{"type":"string","const":"present"},{"type":"string","const":"absent"},{"type":"string","const":"late"},{"type":"string","const":"excused"}]}},"required":["session_id","status"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"attendance_record_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"ok":{"type":"boolean","const":true}},"required":["attendance_record_id","ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/issue_makeup_credit":{"post":{"operationId":"issue_makeup_credit","summary":"Issue a makeup credit using the same eligibility rules as staff operations.","description":"Issue a makeup credit using the same eligibility rules as staff operations. Requires makeups.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["makeups.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["enrollment_id","session_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"makeup_credit_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"ok":{"type":"boolean","const":true}},"required":["makeup_credit_id","ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/consume_makeup_credit":{"post":{"operationId":"consume_makeup_credit","summary":"Use a makeup credit only when a confirmed destination seat can be created in the same write.","description":"Use a makeup credit only when a confirmed destination seat can be created in the same write. Requires makeups.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["makeups.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"makeup_credit_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"target_session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["makeup_credit_id","target_session_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"ok":{"type":"boolean","const":true},"participant_name":{"type":"string"},"remaining_available_credits":{"type":"number"},"reservation_status":{"type":"string","const":"confirmed"},"target_ends_at":{"type":"string","format":"date-time"},"target_offering_name":{"type":"string"},"target_session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"target_starts_at":{"type":"string","format":"date-time"},"target_timezone":{"type":"string"}},"required":["enrollment_id","ok","participant_name","remaining_available_credits","reservation_status","target_ends_at","target_offering_name","target_session_id","target_starts_at"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/set_skill_mark":{"post":{"operationId":"set_skill_mark","summary":"Mark one skill on a student's checklist as attempted or completed, or clear it. Families see marks on their report card.","description":"Mark one skill on a student's checklist as attempted or completed, or clear it. Families see marks on their report card. Requires progress.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["progress.write","progress.guardian_publish"],"x-scope-rules":[{"scope":"progress.guardian_publish","condition":"always"}],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"participant_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"report_card_template_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"level_key":{"type":"string"},"item_key":{"type":"string"},"mark":{"anyOf":[{"anyOf":[{"type":"string","const":"attempted"},{"type":"string","const":"completed"}]},{"type":"null"}]},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["participant_id","report_card_template_id","level_key","item_key","mark"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/upsert_report_card_template":{"post":{"operationId":"upsert_report_card_template","summary":"Create or update an organization report-card template.","description":"Create or update an organization report-card template. Requires progress.templates.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["progress.templates.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"vertical":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"version":{"type":"number"},"description":{"type":"string"},"levels":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"sections":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"items":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"skill_area":{"type":"string"}},"required":["key","label"]}}},"required":["key","label","items"]}}},"required":["key","label","sections"]}},"report_card_template_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["name","vertical","status","version","levels"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true},"report_card_template_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["ok","report_card_template_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/create_invoice":{"post":{"operationId":"create_invoice","summary":"Create an invoice from eligible enrollment balances.","description":"Create an invoice from eligible enrollment balances. Requires invoices.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["invoices.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"due_at":{"type":"string","format":"date-time"},"enrollment_ids":{"type":"array","items":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"promo_code":{"type":"string"}},"required":["enrollment_ids"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"discount":{"type":"object","additionalProperties":false,"properties":{"kind":{"anyOf":[{"type":"string","const":"sibling"},{"type":"string","const":"promo"}]},"total_minor":{"type":"number"}},"required":["kind","total_minor"]},"invoice_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"invoice_number":{"type":"string"},"ok":{"type":"boolean","const":true},"promo_outcome":{"anyOf":[{"type":"string","const":"applied"},{"type":"string","const":"outweighed"}]},"total_minor":{"type":"number"}},"required":["invoice_id","invoice_number","ok","total_minor"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/void_invoice":{"post":{"operationId":"void_invoice","summary":"Void an unpaid invoice.","description":"Void an unpaid invoice. Requires invoices.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["invoices.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"invoice_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["invoice_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"invoice_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"ok":{"type":"boolean","const":true}},"required":["invoice_id","ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/add_invoice_adjustment":{"post":{"operationId":"add_invoice_adjustment","summary":"Add a signed credit or charge with a reason to an open invoice.","description":"Add a signed credit or charge with a reason to an open invoice. Requires invoices.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["invoices.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"invoice_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"reason":{"type":"string"}},"required":["amount_minor","enrollment_id","invoice_id","reason"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"adjustment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"ok":{"type":"boolean","const":true},"total_minor":{"type":"number"}},"required":["adjustment_id","ok","total_minor"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/update_sibling_discount":{"post":{"operationId":"update_sibling_discount","summary":"Set or clear the sibling discount.","description":"Set or clear the sibling discount. Requires settings.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["settings.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rule":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"percent"},"percent":{"type":"number"}},"required":["kind","percent"]},{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"currency":{"type":"string"},"kind":{"type":"string","const":"fixed"}},"required":["amount_minor","currency","kind"]}]}},"required":[]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/create_promo_code":{"post":{"operationId":"create_promo_code","summary":"Create a promo code.","description":"Create a promo code. Requires settings.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["settings.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"max_uses":{"type":"number"},"program_ids":{"type":"array","items":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"rule":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"percent"},"percent":{"type":"number"}},"required":["kind","percent"]},{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"currency":{"type":"string"},"kind":{"type":"string","const":"fixed"}},"required":["amount_minor","currency","kind"]}]}},"required":["code","rule"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true},"promo_code_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["ok","promo_code_id"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/set_promo_code_active":{"post":{"operationId":"set_promo_code_active","summary":"Activate or deactivate a promo code.","description":"Activate or deactivate a promo code. Requires settings.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["settings.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"active":{"type":"boolean"},"promo_code_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["active","promo_code_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/commands/assign_conversation":{"post":{"operationId":"assign_conversation","summary":"Assign or unassign a conversation to an active organization staff member.","description":"Assign or unassign a conversation to an active organization staff member. Requires communications.write. All writes require Idempotency-Key; x-scope-rules declares additional grants by input condition.","tags":["organization-commands"],"x-generated":true,"x-max-request-bytes":16384,"x-required-scopes":["communications.write"],"x-scope-rules":[],"x-mcp":{"expose":true,"readOnly":false,"approval":"required"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"assigned_staff_user_id":{"anyOf":[{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},{"type":"null"}]},"conversation_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["assigned_staff_user_id","conversation_id"]}}}},"responses":{"200":{"description":"Successful command; replay returns the original result.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id","idempotent_replay"],"properties":{"data":{"type":"null"},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_session_operation_targets":{"post":{"operationId":"list_session_operation_targets","summary":"List eligible class dates for an enrollment transfer or makeup credit.","description":"List eligible class dates for an enrollment transfer or makeup credit. An organization-scoped read using JSON filter arguments; requires schedule.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["schedule.read","enrollments.override"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"makeup_credit_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"kind":{"anyOf":[{"type":"string","const":"transfer"},{"type":"string","const":"makeup"}]},"now_ms":{"type":"string","format":"date-time"},"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]}},"required":["session_id","enrollment_id","kind","now_ms","pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"page":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"ends_at":{"type":"string","format":"date-time"},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"starts_at":{"type":"string","format":"date-time"},"timezone":{"type":"string"}},"required":["offering_id","offering_name","ends_at","session_id","starts_at"]}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"},"split_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_status":{"anyOf":[{"type":"string","const":"SplitRecommended"},{"type":"string","const":"SplitRequired"},{"type":"null"}]}},"required":["page","continue_cursor","is_done"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_notification_deliveries":{"post":{"operationId":"list_notification_deliveries","summary":"List message delivery attempts and recipient addresses.","description":"List message delivery attempts and recipient addresses. An organization-scoped read using JSON filter arguments; requires communications.messages.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["communications.messages.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]},"status":{"anyOf":[{"type":"string","const":"attempting"},{"type":"string","const":"accepted"},{"type":"string","const":"cancellation_requested"},{"type":"string","const":"sent"},{"type":"string","const":"delivered"},{"type":"string","const":"bounced"},{"type":"string","const":"complained"},{"type":"string","const":"failed"},{"type":"string","const":"suppressed"},{"type":"string","const":"skipped"}]}},"required":["pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"page":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"organization_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"event_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"recipient_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"provider":{"anyOf":[{"type":"string","const":"resend"},{"type":"string","const":"manual"},{"type":"string","const":"unimplemented"}]},"status":{"anyOf":[{"type":"string","const":"attempting"},{"type":"string","const":"accepted"},{"type":"string","const":"cancellation_requested"},{"type":"string","const":"sent"},{"type":"string","const":"delivered"},{"type":"string","const":"bounced"},{"type":"string","const":"complained"},{"type":"string","const":"failed"},{"type":"string","const":"suppressed"},{"type":"string","const":"skipped"}]},"attempt_number":{"type":"number"},"cancellation_requested_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"error_code":{"type":"string"},"component_email_id":{"type":"string"},"provider_message_id":{"type":"string"},"provider_request_id":{"type":"string"},"retryable":{"type":"boolean"},"template_source":{"anyOf":[{"type":"string","const":"system"},{"type":"string","const":"organization"}]},"template_version":{"type":"number"},"email_identity":{"type":"object","additionalProperties":false,"properties":{"from":{"type":"string"},"name":{"type":"string"},"logo_url":{"type":"string"},"postal_address":{"type":"string"},"reply_to_email":{"type":"string"}},"required":["from","name"]},"created_at":{"type":"string","format":"date-time"},"_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"_creation_time":{"type":"number"},"recipient_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"event_type":{"anyOf":[{"anyOf":[{"type":"string","const":"payment_account_paused"},{"type":"string","const":"payment_action_required"},{"type":"string","const":"sms_ready"},{"type":"string","const":"sms_rejected"},{"type":"string","const":"sms_suspended"},{"type":"string","const":"account_invite"},{"type":"string","const":"household_claim"},{"type":"string","const":"enrollment_confirmation"},{"type":"string","const":"invoice_issued"},{"type":"string","const":"waitlist_change"}]},{"type":"null"}]}},"required":["organization_id","event_id","recipient_id","channel","provider","status","attempt_number","created_at","_id","_creation_time","recipient_address","event_type"]}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"},"split_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_status":{"anyOf":[{"type":"string","const":"SplitRecommended"},{"type":"string","const":"SplitRequired"},{"type":"null"}]}},"required":["page","continue_cursor","is_done"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_notification_delivery":{"post":{"operationId":"get_notification_delivery","summary":"Get a message delivery attempt and its bounded transition history.","description":"Get a message delivery attempt and its bounded transition history. An organization-scoped read using JSON filter arguments; requires communications.messages.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["communications.messages.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"attempt_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["attempt_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"attempt":{"type":"object","additionalProperties":false,"properties":{"organization_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"event_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"recipient_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"provider":{"anyOf":[{"type":"string","const":"resend"},{"type":"string","const":"manual"},{"type":"string","const":"unimplemented"}]},"status":{"anyOf":[{"type":"string","const":"attempting"},{"type":"string","const":"accepted"},{"type":"string","const":"cancellation_requested"},{"type":"string","const":"sent"},{"type":"string","const":"delivered"},{"type":"string","const":"bounced"},{"type":"string","const":"complained"},{"type":"string","const":"failed"},{"type":"string","const":"suppressed"},{"type":"string","const":"skipped"}]},"attempt_number":{"type":"number"},"cancellation_requested_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"error_code":{"type":"string"},"component_email_id":{"type":"string"},"provider_message_id":{"type":"string"},"provider_request_id":{"type":"string"},"retryable":{"type":"boolean"},"template_source":{"anyOf":[{"type":"string","const":"system"},{"type":"string","const":"organization"}]},"template_version":{"type":"number"},"email_identity":{"type":"object","additionalProperties":false,"properties":{"from":{"type":"string"},"name":{"type":"string"},"logo_url":{"type":"string"},"postal_address":{"type":"string"},"reply_to_email":{"type":"string"}},"required":["from","name"]},"created_at":{"type":"string","format":"date-time"},"_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"_creation_time":{"type":"number"},"recipient_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"event_type":{"anyOf":[{"anyOf":[{"type":"string","const":"payment_account_paused"},{"type":"string","const":"payment_action_required"},{"type":"string","const":"sms_ready"},{"type":"string","const":"sms_rejected"},{"type":"string","const":"sms_suspended"},{"type":"string","const":"account_invite"},{"type":"string","const":"household_claim"},{"type":"string","const":"enrollment_confirmation"},{"type":"string","const":"invoice_issued"},{"type":"string","const":"waitlist_change"}]},{"type":"null"}]}},"required":["organization_id","event_id","recipient_id","channel","provider","status","attempt_number","created_at","_id","_creation_time","recipient_address","event_type"]},"transitions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"organization_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"event_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"recipient_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"attempt_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"provider":{"anyOf":[{"type":"string","const":"resend"},{"type":"string","const":"manual"},{"type":"string","const":"unimplemented"}]},"idempotency_key":{"type":"string"},"type":{"anyOf":[{"type":"string","const":"cancellation_requested"},{"type":"string","const":"suppressed"},{"type":"string","const":"skipped"},{"type":"string","const":"accepted"},{"type":"string","const":"sent"},{"type":"string","const":"delivered"},{"type":"string","const":"delivery_delayed"},{"type":"string","const":"bounced"},{"type":"string","const":"complained"},{"type":"string","const":"failed"}]},"occurred_at":{"type":"string","format":"date-time"},"received_at":{"type":"string","format":"date-time"},"provider_message_id":{"type":"string"},"error_code":{"type":"string"},"previous_status":{"anyOf":[{"type":"string","const":"attempting"},{"type":"string","const":"accepted"},{"type":"string","const":"cancellation_requested"},{"type":"string","const":"sent"},{"type":"string","const":"delivered"},{"type":"string","const":"bounced"},{"type":"string","const":"complained"},{"type":"string","const":"failed"},{"type":"string","const":"suppressed"},{"type":"string","const":"skipped"}]},"status":{"anyOf":[{"type":"string","const":"attempting"},{"type":"string","const":"accepted"},{"type":"string","const":"cancellation_requested"},{"type":"string","const":"sent"},{"type":"string","const":"delivered"},{"type":"string","const":"bounced"},{"type":"string","const":"complained"},{"type":"string","const":"failed"},{"type":"string","const":"suppressed"},{"type":"string","const":"skipped"}]},"_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"_creation_time":{"type":"number"}},"required":["organization_id","event_id","recipient_id","attempt_id","provider","idempotency_key","type","occurred_at","received_at","previous_status","status","_id","_creation_time"]}},"transitions_truncated":{"type":"boolean"}},"required":["attempt","transitions","transitions_truncated"]}]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_notification_suppressions":{"post":{"operationId":"list_notification_suppressions","summary":"List blocked recipients and their message scopes.","description":"List blocked recipients and their message scopes. An organization-scoped read using JSON filter arguments; requires communications.messages.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["communications.messages.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]},"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"revoked"}]}},"required":["pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"page":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"organization_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"recipient_key":{"type":"string"},"reason":{"anyOf":[{"type":"string","const":"hard_bounce"},{"type":"string","const":"complaint"},{"type":"string","const":"unsubscribe"},{"type":"string","const":"manual"},{"type":"string","const":"operational"}]},"scope":{"anyOf":[{"type":"string","const":"all"},{"type":"string","const":"marketing"},{"type":"string","const":"transactional"}]},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"revoked"}]},"expires_at":{"type":"string","format":"date-time"},"source_attempt_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"source_event_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"_creation_time":{"type":"number"}},"required":["organization_id","channel","recipient_key","reason","scope","status","created_at","updated_at","_id","_creation_time"]}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"},"split_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_status":{"anyOf":[{"type":"string","const":"SplitRecommended"},{"type":"string","const":"SplitRequired"},{"type":"null"}]}},"required":["page","continue_cursor","is_done"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_import_templates":{"post":{"operationId":"get_import_templates","summary":"Get supported CSV column keys, required columns and sample rows for each import kind.","description":"Get supported CSV column keys, required columns and sample rows for each import kind. An organization-scoped read using JSON filter arguments; requires imports.write. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["imports.write"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"fields":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"required":{"type":"boolean"},"aliases":{"type":"array","items":{"type":"string"}}},"required":["key","label","aliases"]}},"sample_rows":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}}}},"required":["kind","label","description","fields","sample_rows"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_job":{"post":{"operationId":"get_job","summary":"Get asynchronous operation status and result; also requires the operation’s original scope.","description":"Get asynchronous operation status and result; also requires the operation’s original scope. An organization-scoped read using JSON filter arguments; requires organization.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["organization.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["job_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"status":{"anyOf":[{"type":"string","const":"queued"},{"type":"string","const":"running"},{"type":"string","const":"complete"},{"type":"string","const":"failed"}]},"result":{"type":"object","additionalProperties":false,"properties":{"domain_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"hostname":{"type":"string"},"domain_status":{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"active"},{"type":"string","const":"disabled"}]},"delivered":{"type":"boolean"},"connected":{"type":"boolean"},"message":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"email"},"html":{"type":"string"},"subject":{"type":"string"},"text":{"type":"string"}},"required":["channel","html","subject","text"]},{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"sms"},"body":{"type":"string"}},"required":["channel","body"]},{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"push"},"body":{"type":"string"},"title":{"type":"string"}},"required":["channel","body","title"]}]},"source":{"anyOf":[{"type":"string","const":"system"},{"type":"string","const":"organization"}]},"version":{"type":"number"}},"required":[]},"error_code":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","status","created_at","updated_at"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_session_roster":{"post":{"operationId":"get_session_roster","summary":"Get attendance, makeup and enrollment details for a class date.","description":"Get attendance, makeup and enrollment details for a class date. An organization-scoped read using JSON filter arguments; requires roster.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["roster.read","roster.contacts.read","participants.details.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["session_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"can_manage_enrollment_operations":{"type":"boolean"},"capacity":{"type":"number"},"counts":{"type":"object","additionalProperties":false,"properties":{"absent":{"type":"number"},"canceled":{"type":"number"},"confirmed":{"type":"number"},"waitlisted":{"type":"number"}},"required":["absent","canceled","confirmed","waitlisted"]},"location_name":{"type":"string"},"offering":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]}},"required":["id","name","status"]},"program_name":{"type":"string"},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"attendance_status":{"anyOf":[{"anyOf":[{"type":"string","const":"present"},{"type":"string","const":"absent"},{"type":"string","const":"late"},{"type":"string","const":"excused"}]},{"type":"string","const":"ready"}]},"available_makeup_credit_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"available_makeup_credits":{"type":"number"},"contact_hints":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"relationship":{"type":"string"},"role":{"type":"string"}},"required":["role"]}},"covers_all_class_dates":{"type":"boolean"},"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"enrollment_status":{"anyOf":[{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"confirmed"},{"type":"string","const":"waitlisted"},{"type":"string","const":"canceled"},{"type":"string","const":"transferred"},{"type":"string","const":"completed"}]},{"type":"string","const":"makeup"}]},"makeup_visit_credit_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"makeup_credit_issued_for_attendance":{"type":"boolean"},"participant":{"type":"object","additionalProperties":false,"properties":{"date_of_birth":{"type":"string"},"display_name":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"safety":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"allergies":{"type":"string"},"emergency_contacts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"phone":{"type":"string"},"relationship":{"type":"string"}},"required":["name","phone"]}},"medical_notes":{"type":"string"},"swim_ability":{"type":"string"}},"required":["emergency_contacts"]}]},"status":{"type":"string"}},"required":["display_name","id","safety","status"]},"payment_status":{"anyOf":[{"type":"string","const":"not_required"},{"type":"string","const":"unpaid"},{"type":"string","const":"pending"},{"type":"string","const":"partially_paid"},{"type":"string","const":"paid"},{"type":"string","const":"partially_refunded"},{"type":"string","const":"refunded"},{"type":"string","const":"failed"},{"type":"string","const":"overpaid"}]},"waitlist_position":{"type":"number"}},"required":["attendance_status","available_makeup_credits","contact_hints","covers_all_class_dates","enrollment_status","makeup_credit_issued_for_attendance","participant"]}},"session":{"type":"object","additionalProperties":false,"properties":{"cancel_reason":{"type":"string"},"ends_at":{"type":"string","format":"date-time"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"starts_at":{"type":"string","format":"date-time"},"status":{"type":"string"},"timezone":{"type":"string"}},"required":["ends_at","id","starts_at","status"]}},"required":["can_manage_enrollment_operations","counts","offering","program_name","rows","session"]}]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/search_enrollments":{"post":{"operationId":"search_enrollments","summary":"Search enrollment and balance details.","description":"Search enrollment and balance details. An organization-scoped read using JSON filter arguments; requires invoices.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["invoices.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"search":{"type":"string"},"status":{"type":"string"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]},"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"can_manage_payments":{"type":"boolean"},"can_manage_waitlist":{"type":"boolean"},"has_more":{"type":"boolean"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"offering_name":{"type":"string"},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"amount_due_minor":{"type":"number"},"amount_paid_minor":{"type":"number"},"amount_refunded_minor":{"type":"number"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"outstanding_minor":{"type":"number"},"participant_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"participant_name":{"type":"string"},"payment_status":{"anyOf":[{"type":"string","const":"not_required"},{"type":"string","const":"unpaid"},{"type":"string","const":"pending"},{"type":"string","const":"partially_paid"},{"type":"string","const":"paid"},{"type":"string","const":"partially_refunded"},{"type":"string","const":"refunded"},{"type":"string","const":"failed"},{"type":"string","const":"overpaid"}]},"price_currency":{"type":"string"},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"session_starts_at":{"type":"string","format":"date-time"},"status":{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"confirmed"},{"type":"string","const":"waitlisted"},{"type":"string","const":"canceled"},{"type":"string","const":"transferred"},{"type":"string","const":"completed"}]},"transfer_credit_minor":{"type":"number"},"transfer_surplus_minor":{"type":"number"},"waitlist_position":{"type":"number"}},"required":["id","offering_id","offering_name","participant_id","participant_name","status"]}}},"required":["can_manage_payments","can_manage_waitlist","has_more","next_cursor","rows"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_operations_queue":{"post":{"operationId":"get_operations_queue","summary":"Get organization work queues; personal dismissals are not available to service actors.","description":"Get organization work queues; personal dismissals are not available to service actors. An organization-scoped read using JSON filter arguments; requires operations.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["operations.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"now_ms":{"type":"string","format":"date-time"},"cursor":{"type":"string"},"section":{"anyOf":[{"type":"string","const":"attention"},{"type":"string","const":"upcoming"},{"type":"string","const":"dismissed"}]},"severity":{"anyOf":[{"type":"string","const":"critical"},{"type":"string","const":"action_needed"},{"type":"string","const":"upcoming"}]},"assignment":{"anyOf":[{"type":"string","const":"mine"},{"type":"string","const":"unassigned"}]}},"required":["now_ms"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"actions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"action_key":{"type":"string"},"assigned_to":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"is_viewer":{"type":"boolean"},"user_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["display_name","is_viewer","user_id"]},"description":{"type":"string"},"dismissible":{"type":"boolean"},"due_at":{"type":"string","format":"date-time"},"href":{"type":"string"},"kind":{"type":"string"},"primary_action_label":{"type":"string"},"severity":{"anyOf":[{"type":"string","const":"critical"},{"type":"string","const":"action_needed"},{"type":"string","const":"upcoming"}]},"snoozed_until":{"type":"string","format":"date-time"},"subject":{"type":"string"},"title":{"type":"string"}},"required":["action_key","description","dismissible","href","kind","primary_action_label","severity","title"]}},"coming_up":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"action_key":{"type":"string"},"assigned_to":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"is_viewer":{"type":"boolean"},"user_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["display_name","is_viewer","user_id"]},"description":{"type":"string"},"dismissible":{"type":"boolean"},"due_at":{"type":"string","format":"date-time"},"href":{"type":"string"},"kind":{"type":"string"},"primary_action_label":{"type":"string"},"severity":{"anyOf":[{"type":"string","const":"critical"},{"type":"string","const":"action_needed"},{"type":"string","const":"upcoming"}]},"snoozed_until":{"type":"string","format":"date-time"},"subject":{"type":"string"},"title":{"type":"string"}},"required":["action_key","description","dismissible","href","kind","primary_action_label","severity","title"]}},"dismissed":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"action_key":{"type":"string"},"assigned_to":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"is_viewer":{"type":"boolean"},"user_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["display_name","is_viewer","user_id"]},"description":{"type":"string"},"dismissible":{"type":"boolean"},"due_at":{"type":"string","format":"date-time"},"href":{"type":"string"},"kind":{"type":"string"},"primary_action_label":{"type":"string"},"severity":{"anyOf":[{"type":"string","const":"critical"},{"type":"string","const":"action_needed"},{"type":"string","const":"upcoming"}]},"snoozed_until":{"type":"string","format":"date-time"},"subject":{"type":"string"},"title":{"type":"string"}},"required":["action_key","description","dismissible","href","kind","primary_action_label","severity","title"]}},"counts":{"type":"object","additionalProperties":false,"properties":{"attention":{"type":"number"},"filtered":{"anyOf":[{"type":"number"},{"type":"null"}]},"upcoming":{"type":"number"}},"required":["attention","filtered","upcoming"]},"pagination":{"type":"object","additionalProperties":false,"properties":{"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"}},"required":["continue_cursor","is_done"]},"setup":{"type":"object","additionalProperties":false,"properties":{"has_active_offering":{"type":"boolean"},"has_active_program":{"type":"boolean"}},"required":["has_active_offering","has_active_program"]},"timeline":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"attendance_recorded":{"type":"boolean"},"capacity":{"type":"number"},"ends_at":{"type":"string","format":"date-time"},"enrolled_count":{"type":"number"},"href":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"location_name":{"type":"string"},"starts_at":{"type":"string","format":"date-time"},"title":{"type":"string"},"timezone":{"type":"string"}},"required":["attendance_recorded","ends_at","enrolled_count","href","id","starts_at","title"]}},"timeline_has_more":{"type":"boolean"}},"required":["actions","coming_up","dismissed","counts","pagination","setup","timeline","timeline_has_more"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_service_tokens":{"post":{"operationId":"list_service_tokens","summary":"List credential metadata without secrets.","description":"List credential metadata without secrets. An organization-scoped read using JSON filter arguments; requires staff.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["staff.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"now_ms":{"type":"string","format":"date-time"}},"required":["now_ms"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"tokens":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"created_at":{"type":"string","format":"date-time"},"created_by_label":{"type":"string"},"creator_access_revoked":{"type":"boolean"},"expires_at":{"type":"string","format":"date-time"},"expiry_warning":{"anyOf":[{"type":"string","const":"action_needed"},{"type":"string","const":"upcoming"}]},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"last_used_at":{"type":"string","format":"date-time"},"name":{"type":"string"},"revoked_at":{"type":"string","format":"date-time"},"rotated_from_token_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"scopes":{"type":"array","items":{"anyOf":[{"type":"string","const":"communications.messages.read"},{"type":"string","const":"locations.write"},{"type":"string","const":"resources.read"},{"type":"string","const":"resources.write"},{"type":"string","const":"makeups.write"},{"type":"string","const":"progress.templates.write"},{"type":"string","const":"invoices.read"},{"type":"string","const":"invoices.write"},{"type":"string","const":"payments.read"},{"type":"string","const":"payments.write"},{"type":"string","const":"payments.refund"},{"type":"string","const":"communications.write"},{"type":"string","const":"participants.write"},{"type":"string","const":"participants.details.read"},{"type":"string","const":"reports.read"},{"type":"string","const":"reports.write"},{"type":"string","const":"exports.read"},{"type":"string","const":"imports.write"},{"type":"string","const":"staff.read"},{"type":"string","const":"staff.write"},{"type":"string","const":"domains.read"},{"type":"string","const":"domains.write"},{"type":"string","const":"operations.read"},{"type":"string","const":"operations.write"},{"type":"string","const":"organization.read"},{"type":"string","const":"locations.read"},{"type":"string","const":"catalog.read"},{"type":"string","const":"catalog.write"},{"type":"string","const":"catalog.publish"},{"type":"string","const":"schedule.read"},{"type":"string","const":"schedule.preview"},{"type":"string","const":"schedule.apply"},{"type":"string","const":"participants.read"},{"type":"string","const":"participants.consent.write"},{"type":"string","const":"enrollments.read"},{"type":"string","const":"enrollments.write"},{"type":"string","const":"enrollments.override"},{"type":"string","const":"roster.read"},{"type":"string","const":"roster.contacts.read"},{"type":"string","const":"attendance.write"},{"type":"string","const":"progress.read"},{"type":"string","const":"progress.write"},{"type":"string","const":"progress.guardian_publish"},{"type":"string","const":"communications.read"},{"type":"string","const":"settings.read"},{"type":"string","const":"settings.write"},{"type":"string","const":"staff.invite"},{"type":"string","const":"audit.read"}]}},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"expired"},{"type":"string","const":"revoked"},{"type":"string","const":"superseded"}]},"token_prefix":{"type":"string"}},"required":["created_at","creator_access_revoked","expires_at","id","name","scopes","status","token_prefix"]}},"viewer_role":{"anyOf":[{"type":"string","const":"owner"},{"type":"string","const":"admin"},{"type":"string","const":"staff"},{"type":"string","const":"instructor"}]}},"required":["tokens"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_report":{"post":{"operationId":"get_report","summary":"Get report preparation status and summary.","description":"Get report preparation status and summary. An organization-scoped read using JSON filter arguments; requires reports.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["reports.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["job_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"status":{"anyOf":[{"type":"string","const":"running"},{"type":"string","const":"complete"},{"type":"string","const":"failed"}]},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"source_changed":{"type":"boolean"},"summary":{"type":"object","additionalProperties":false,"properties":{"attendance":{"type":"object","additionalProperties":false,"properties":{"absent":{"type":"number"},"attended":{"type":"number"},"excused":{"type":"number"},"late":{"type":"number"},"missed":{"type":"number"},"present":{"type":"number"},"recorded":{"type":"number"},"unrecorded":{"type":"number"}},"required":["absent","attended","excused","late","missed","present","recorded","unrecorded"]},"cancellations":{"type":"object","additionalProperties":false,"properties":{"enrollments":{"type":"number"},"sessions":{"type":"number"}},"required":["enrollments","sessions"]},"capacity":{"type":"object","additionalProperties":false,"properties":{"full":{"type":"number"},"no_limit":{"type":"number"},"over_capacity":{"type":"number"},"sessions":{"type":"number"},"under_filled":{"type":"number"},"waitlisted":{"type":"number"}},"required":["full","no_limit","over_capacity","sessions","under_filled","waitlisted"]},"enrollments":{"type":"object","additionalProperties":false,"properties":{"canceled":{"type":"number"},"completed":{"type":"number"},"confirmed":{"type":"number"},"pending":{"type":"number"},"total":{"type":"number"},"transferred":{"type":"number"},"waitlisted":{"type":"number"}},"required":["canceled","completed","confirmed","pending","total","transferred","waitlisted"]},"makeups":{"type":"object","additionalProperties":false,"properties":{"available":{"type":"number"},"consumed":{"type":"number"},"issued":{"type":"number"}},"required":["available","consumed","issued"]},"payments":{"type":"object","additionalProperties":false,"properties":{"failed":{"type":"number"},"not_required":{"type":"number"},"overpaid":{"type":"number"},"paid":{"type":"number"},"partially_paid":{"type":"number"},"partially_refunded":{"type":"number"},"pending":{"type":"number"},"refunded":{"type":"number"},"unrecorded":{"type":"number"},"unpaid":{"type":"number"},"recorded":{"type":"number"},"total":{"type":"number"}},"required":["failed","not_required","overpaid","paid","partially_paid","partially_refunded","pending","refunded","unrecorded","unpaid","recorded","total"]}},"required":["attendance","cancellations","capacity","enrollments","makeups","payments"]},"data_quality":{"type":"object","additionalProperties":false,"properties":{"has_attendance_data":{"type":"boolean"},"has_capacity_data":{"type":"boolean"},"has_payment_data":{"type":"boolean"},"has_session_data":{"type":"boolean"},"is_partial":{"type":"boolean"}},"required":["has_attendance_data","has_capacity_data","has_payment_data","has_session_data","is_partial"]},"row_counts":{"type":"object","additionalProperties":false,"properties":{"attendance":{"type":"number"},"capacity":{"type":"number"},"revenue":{"type":"number"}},"required":["attendance","capacity","revenue"]}},"required":["id","status","created_at","source_changed","summary","data_quality","row_counts"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_report_rows":{"post":{"operationId":"get_report_rows","summary":"Read a page of completed report rows.","description":"Read a page of completed report rows. An organization-scoped read using JSON filter arguments; requires reports.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["reports.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"job_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"kind":{"anyOf":[{"type":"string","const":"attendance"},{"type":"string","const":"capacity"},{"type":"string","const":"revenue"}]},"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]}},"required":["job_id","kind","pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"page":{"type":"array","items":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"attended_count":{"type":"number"},"expected_count":{"type":"number"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"makeup_count":{"type":"number"},"missed_count":{"type":"number"},"offering_name":{"type":"string"},"program_name":{"type":"string"},"recorded_count":{"type":"number"},"starts_at":{"type":"string","format":"date-time"},"status":{"anyOf":[{"type":"string","const":"scheduled"},{"type":"string","const":"cancelled"},{"type":"string","const":"completed"},{"type":"string","const":"rescheduled"}]},"timezone":{"type":"string"},"unrecorded_count":{"type":"number"},"kind":{"type":"string","const":"attendance"}},"required":["attended_count","expected_count","id","makeup_count","missed_count","offering_name","program_name","recorded_count","starts_at","status","unrecorded_count","kind"]},{"type":"object","additionalProperties":false,"properties":{"capacity":{"type":"number"},"confirmed_count":{"type":"number"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"makeup_count":{"type":"number"},"needs_attention":{"type":"boolean"},"occupied_count":{"type":"number"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"program_name":{"type":"string"},"remaining_seats":{"type":"number"},"starts_at":{"type":"string","format":"date-time"},"state":{"anyOf":[{"type":"string","const":"full"},{"type":"string","const":"no_limit"},{"type":"string","const":"over_capacity"},{"type":"string","const":"under_filled"},{"type":"string","const":"waitlisted"}]},"timezone":{"type":"string"},"waitlist_count":{"type":"number"},"kind":{"type":"string","const":"capacity"}},"required":["confirmed_count","id","makeup_count","needs_attention","occupied_count","offering_id","offering_name","program_name","starts_at","state","waitlist_count","kind"]},{"type":"object","additionalProperties":false,"properties":{"failed":{"type":"number"},"not_required":{"type":"number"},"overpaid":{"type":"number"},"paid":{"type":"number"},"partially_paid":{"type":"number"},"partially_refunded":{"type":"number"},"pending":{"type":"number"},"refunded":{"type":"number"},"unrecorded":{"type":"number"},"unpaid":{"type":"number"},"enrollment_count":{"type":"number"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"program_name":{"type":"string"},"kind":{"type":"string","const":"revenue"}},"required":["failed","not_required","overpaid","paid","partially_paid","partially_refunded","pending","refunded","unrecorded","unpaid","enrollment_count","offering_id","offering_name","program_name","kind"]}]}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"},"split_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_status":{"anyOf":[{"type":"string","const":"SplitRecommended"},{"type":"string","const":"SplitRequired"},{"type":"null"}]}},"required":["page","continue_cursor","is_done"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_catalog_overview":{"post":{"operationId":"get_catalog_overview","summary":"Get catalog overview.","description":"Get catalog overview. An organization-scoped read using JSON filter arguments; requires catalog.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"now_ms":{"type":"string","format":"date-time"}},"required":["now_ms"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"counts":{"type":"object","additionalProperties":false,"properties":{"capacity_warnings":{"type":"number"},"enrollments_active":{"type":"number"},"offerings_active":{"type":"number"},"offerings_draft":{"type":"number"},"pending_enrollments":{"type":"number"},"participants_active":{"type":"number"},"progress_tasks":{"type":"number"},"programs_active":{"type":"number"},"programs_draft":{"type":"number"},"roster_tasks":{"type":"number"},"upcoming_sessions":{"type":"number"},"waitlisted_enrollments":{"type":"number"}},"required":["capacity_warnings","enrollments_active","offerings_active","offerings_draft","pending_enrollments","participants_active","progress_tasks","programs_active","programs_draft","roster_tasks","upcoming_sessions","waitlisted_enrollments"]},"owner_metrics":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"capacity_warnings":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"capacity":{"type":"number"},"confirmed_count":{"type":"number"},"level":{"anyOf":[{"type":"string","const":"full"},{"type":"string","const":"near_capacity"},{"type":"string","const":"over_capacity"},{"type":"string","const":"waitlisted"}]},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"waitlist_count":{"type":"number"}},"required":["capacity","confirmed_count","level","offering_id","offering_name","waitlist_count"]}},"recent_activity":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"action":{"type":"string"},"actor_kind":{"anyOf":[{"type":"string","const":"user"},{"type":"string","const":"system"},{"type":"string","const":"api"}]},"created_at":{"type":"string","format":"date-time"},"target_id":{"type":"string"},"target_table":{"type":"string"}},"required":["action","actor_kind","created_at"]}}},"required":["capacity_warnings","recent_activity"]}]},"setup":{"type":"object","additionalProperties":false,"properties":{"has_active_offering":{"type":"boolean"},"has_active_program":{"type":"boolean"},"has_upcoming_session":{"type":"boolean"}},"required":["has_active_offering","has_active_program","has_upcoming_session"]},"upcoming_sessions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"capacity":{"type":"number"},"ends_at":{"type":"string","format":"date-time"},"enrolled_count":{"type":"number"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"roster_open":{"type":"boolean"},"starts_at":{"type":"string","format":"date-time"},"status":{"type":"string"},"timezone":{"type":"string"}},"required":["ends_at","enrolled_count","id","offering_name","roster_open","starts_at","status"]}}},"required":["counts","owner_metrics","setup","upcoming_sessions"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/search_programs":{"post":{"operationId":"search_programs","summary":"Search programs.","description":"Search programs. An organization-scoped read using JSON filter arguments; requires catalog.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"search":{"type":"string"},"status":{"type":"string"},"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]}},"required":["pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"can_manage_catalog":{"type":"boolean"},"has_more":{"type":"boolean"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"description":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"offering_count":{"type":"number"},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]}},"required":["id","name","offering_count","slug","status"]}}},"required":["can_manage_catalog","has_more","next_cursor","rows"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_program_details":{"post":{"operationId":"get_program_details","summary":"Get program details.","description":"Get program details. An organization-scoped read using JSON filter arguments; requires catalog.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["program_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"description":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"offering_count":{"type":"number"},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"family_info":{"type":"string"},"has_current_offerings":{"type":"boolean"}},"required":["id","name","offering_count","slug","status","has_current_offerings"]}]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/search_offerings":{"post":{"operationId":"search_offerings","summary":"Search offerings.","description":"Search offerings. An organization-scoped read using JSON filter arguments; requires catalog.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"now_ms":{"type":"string","format":"date-time"},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"capacity":{"type":"string"},"search":{"type":"string"},"status":{"type":"string"},"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]}},"required":["now_ms","pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"can_manage_catalog":{"type":"boolean"},"has_more":{"type":"boolean"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"accepted_payment_methods":{"type":"array","items":{"anyOf":[{"type":"string","const":"cash"},{"type":"string","const":"check"},{"type":"string","const":"external_card"},{"type":"string","const":"stripe"},{"type":"string","const":"other"}]}},"capacity":{"type":"number"},"capacity_state":{"type":"string"},"confirmed_count":{"type":"number"},"description":{"type":"string"},"hidden_from_public_catalog":{"type":"boolean"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"instructor_resource_ids":{"type":"array","items":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"location_name":{"type":"string"},"name":{"type":"string"},"next_session_at":{"type":"string","format":"date-time"},"payment_collection_mode":{"anyOf":[{"type":"string","const":"none"},{"type":"string","const":"optional"},{"type":"string","const":"required"}]},"price_amount_minor":{"type":"number"},"price_currency":{"type":"string"},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"program_name":{"type":"string"},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"session_count":{"type":"number"},"term_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"waitlist_count":{"type":"number"}},"required":["hidden_from_public_catalog","id","name","program_id","program_name","slug","status","waitlist_count"]}}},"required":["can_manage_catalog","has_more","next_cursor","rows"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_offering_details":{"post":{"operationId":"get_offering_details","summary":"Get offering details.","description":"Get offering details. An organization-scoped read using JSON filter arguments; requires catalog.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["offering_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"accepted_payment_methods":{"type":"array","items":{"anyOf":[{"type":"string","const":"cash"},{"type":"string","const":"check"},{"type":"string","const":"external_card"},{"type":"string","const":"stripe"},{"type":"string","const":"other"}]}},"capacity":{"type":"number"},"capacity_state":{"type":"string"},"confirmed_count":{"type":"number"},"description":{"type":"string"},"hidden_from_public_catalog":{"type":"boolean"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"instructor_resource_ids":{"type":"array","items":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"location_name":{"type":"string"},"name":{"type":"string"},"next_session_at":{"type":"string","format":"date-time"},"payment_collection_mode":{"anyOf":[{"type":"string","const":"none"},{"type":"string","const":"optional"},{"type":"string","const":"required"}]},"price_amount_minor":{"type":"number"},"price_currency":{"type":"string"},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"program_name":{"type":"string"},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"session_count":{"type":"number"},"term_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"waitlist_count":{"type":"number"},"family_info":{"type":"string"},"program_family_info":{"type":"string"}},"required":["hidden_from_public_catalog","id","name","program_id","program_name","slug","status"]}]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_schedule_rules":{"post":{"operationId":"list_schedule_rules","summary":"List schedule rules.","description":"List schedule rules. An organization-scoped read using JSON filter arguments; requires schedule.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["schedule.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["offering_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"days_of_week":{"type":"array","items":{"anyOf":[{"type":"string","const":"monday"},{"type":"string","const":"tuesday"},{"type":"string","const":"wednesday"},{"type":"string","const":"thursday"},{"type":"string","const":"friday"},{"type":"string","const":"saturday"},{"type":"string","const":"sunday"}]}},"duration_minutes":{"type":"number"},"end_date":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"interval_weeks":{"type":"number"},"local_start_time":{"type":"string"},"start_date":{"type":"string"},"timezone":{"type":"string"}},"required":["days_of_week","duration_minutes","end_date","id","local_start_time","start_date","timezone"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_offering_schedule":{"post":{"operationId":"get_offering_schedule","summary":"Get offering schedule.","description":"Get offering schedule. An organization-scoped read using JSON filter arguments; requires schedule.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["schedule.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"now_ms":{"type":"string","format":"date-time"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["now_ms","offering_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"rules":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"days_of_week":{"type":"array","items":{"anyOf":[{"type":"string","const":"monday"},{"type":"string","const":"tuesday"},{"type":"string","const":"wednesday"},{"type":"string","const":"thursday"},{"type":"string","const":"friday"},{"type":"string","const":"saturday"},{"type":"string","const":"sunday"}]}},"duration_minutes":{"type":"number"},"end_date":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"interval_weeks":{"type":"number"},"local_start_time":{"type":"string"},"start_date":{"type":"string"},"timezone":{"type":"string"}},"required":["days_of_week","duration_minutes","end_date","id","local_start_time","start_date","timezone"]}},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"date":{"type":"string"},"end_time":{"type":"string"},"has_attendance":{"type":"boolean"},"has_enrollments":{"type":"boolean"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"source":{"anyOf":[{"type":"string","const":"custom"},{"type":"string","const":"existing"},{"type":"string","const":"generated"}]},"start_time":{"type":"string"},"timezone":{"type":"string"}},"required":["date","end_time","has_attendance","has_enrollments","id","source","start_time","timezone"]}},"timezone":{"type":"string"}},"required":["rules","rows"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_class_dates":{"post":{"operationId":"list_class_dates","summary":"List class dates.","description":"List class dates. An organization-scoped read using JSON filter arguments; requires schedule.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["schedule.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"capacity":{"type":"number"},"ends_at":{"type":"string","format":"date-time"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"location_name":{"type":"string"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"offering_status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"program_name":{"type":"string"},"starts_at":{"type":"string","format":"date-time"},"status":{"anyOf":[{"type":"string","const":"scheduled"},{"type":"string","const":"cancelled"},{"type":"string","const":"completed"},{"type":"string","const":"rescheduled"}]},"timezone":{"type":"string"}},"required":["ends_at","id","offering_id","offering_name","program_name","starts_at","status"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_next_class_date":{"post":{"operationId":"get_next_class_date","summary":"Get next class date.","description":"Get next class date. An organization-scoped read using JSON filter arguments; requires schedule.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["schedule.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"starts_at":{"type":"string","format":"date-time"}},"required":["starts_at"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"starts_at":{"type":"string","format":"date-time"},"timezone":{"type":"string"}},"required":["starts_at"]}]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_schedule_week":{"post":{"operationId":"get_schedule_week","summary":"Get schedule week.","description":"Get schedule week. An organization-scoped read using JSON filter arguments; requires schedule.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["schedule.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ends_at":{"type":"string","format":"date-time"},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"needs_roster":{"type":"boolean"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"starts_at":{"type":"string","format":"date-time"}},"required":["ends_at","starts_at"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"filtered_offering_name":{"type":"string"},"has_more":{"type":"boolean"},"sessions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"capacity":{"type":"number"},"ends_at":{"type":"string","format":"date-time"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"location_name":{"type":"string"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"offering_status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"program_name":{"type":"string"},"starts_at":{"type":"string","format":"date-time"},"status":{"anyOf":[{"type":"string","const":"scheduled"},{"type":"string","const":"cancelled"},{"type":"string","const":"completed"},{"type":"string","const":"rescheduled"}]},"timezone":{"type":"string"},"attendance_recorded":{"type":"boolean"},"enrolled_count":{"type":"number"}},"required":["ends_at","id","offering_id","offering_name","program_name","starts_at","status","attendance_recorded","enrolled_count"]}}},"required":["has_more","sessions"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_schedule_month":{"post":{"operationId":"get_schedule_month","summary":"Get schedule month summary.","description":"Get schedule month summary. An organization-scoped read using JSON filter arguments; requires schedule.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["schedule.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ends_at":{"type":"string","format":"date-time"},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"starts_at":{"type":"string","format":"date-time"}},"required":["ends_at","starts_at"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"days":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"cancelled_count":{"type":"number"},"date":{"type":"string"},"scheduled_count":{"type":"number"}},"required":["cancelled_count","date","scheduled_count"]}},"filtered_offering_name":{"type":"string"},"has_more":{"type":"boolean"}},"required":["days","has_more"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_class_date_details":{"post":{"operationId":"get_class_date_details","summary":"Get class date details.","description":"Get class date details. An organization-scoped read using JSON filter arguments; requires schedule.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["schedule.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["session_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"cancel_reason":{"type":"string"},"cancelled_at":{"type":"string","format":"date-time"},"cancelled_by":{"type":"string"},"capacity":{"type":"number"},"ends_at":{"type":"string","format":"date-time"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"offering_status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"original_ends_at":{"type":"string","format":"date-time"},"original_starts_at":{"type":"string","format":"date-time"},"program_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"program_name":{"type":"string"},"resource_ids":{"type":"array","items":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"starts_at":{"type":"string","format":"date-time"},"status":{"anyOf":[{"type":"string","const":"scheduled"},{"type":"string","const":"cancelled"},{"type":"string","const":"completed"},{"type":"string","const":"rescheduled"}]},"timezone":{"type":"string"}},"required":["ends_at","id","offering_id","offering_name","offering_status","program_id","program_name","starts_at","status"]}]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_location_options":{"post":{"operationId":"list_location_options","summary":"List location options.","description":"List location options. An organization-scoped read using JSON filter arguments; requires locations.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["locations.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"slug":{"type":"string"},"timezone":{"type":"string"}},"required":["id","name","slug"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_offering_options":{"post":{"operationId":"list_offering_options","summary":"List offering options.","description":"List offering options. An organization-scoped read using JSON filter arguments; requires catalog.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"context_offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"program_name":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]}},"required":["id","name","program_name","status"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_program_options":{"post":{"operationId":"list_program_options","summary":"List program options.","description":"List program options. An organization-scoped read using JSON filter arguments; requires catalog.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]}},"required":["id","name","slug","status"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_offering_defaults":{"post":{"operationId":"get_offering_defaults","summary":"Get offering defaults.","description":"Get offering defaults. An organization-scoped read using JSON filter arguments; requires catalog.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["catalog.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"default_capacity":{"type":"number"},"default_duration_minutes":{"type":"number"}},"required":[]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_resources":{"post":{"operationId":"list_resources","summary":"List resources.","description":"List resources. An organization-scoped read using JSON filter arguments; requires resources.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["resources.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"kind":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]}},"required":["id","kind","name","slug","status"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/search_participants":{"post":{"operationId":"search_participants","summary":"Search participants.","description":"Search participants. An organization-scoped read using JSON filter arguments; requires participants.details.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["participants.details.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]},"search":{"type":"string"},"status":{"type":"string"},"claim":{"type":"string"},"progress_before":{"type":"string","format":"date-time"}},"required":["pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"rows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"display_name":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"inactive"},{"type":"string","const":"archived"}]},"household_name":{"type":"string"},"household_claim_status":{"anyOf":[{"type":"string","const":"claimed"},{"type":"string","const":"unclaimed"}]},"pending_claim_expires_at":{"type":"string","format":"date-time"},"latest_progress":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"completed_count":{"type":"number"},"level_label":{"type":"string"},"marked_at":{"type":"string","format":"date-time"},"total_count":{"type":"number"}},"required":["completed_count","level_label","marked_at","total_count"]}]}},"required":["id","display_name","status","latest_progress"]}}},"required":["has_more","next_cursor","rows"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_participant_profiles":{"post":{"operationId":"list_participant_profiles","summary":"List participant profiles.","description":"List participant profiles. An organization-scoped read using JSON filter arguments; requires participants.details.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["participants.details.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"display_name":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"inactive"},{"type":"string","const":"archived"}]},"date_of_birth":{"type":"string"},"family_name":{"type":"string"},"given_name":{"type":"string"},"household":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"status":{"type":"string"}},"required":["id","name","status"]}]},"household_members":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"display_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"relationship":{"type":"string"},"role":{"anyOf":[{"type":"string","const":"guardian"},{"type":"string","const":"emergency_contact"},{"type":"string","const":"billing_contact"},{"type":"string","const":"other"}]},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"invited"},{"type":"string","const":"removed"}]}},"required":["id","role","status"]}},"provider_link":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"consent_status":{"anyOf":[{"type":"string","const":"granted"},{"type":"string","const":"not_required"},{"type":"string","const":"pending"},{"type":"string","const":"revoked"}]},"external_reference":{"type":"string"},"provider_visibility":{"anyOf":[{"type":"string","const":"full_profile"},{"type":"string","const":"hidden"},{"type":"string","const":"limited_profile"}]},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"revoked"}]}},"required":["id","status"]}]}},"required":["id","display_name","status","household","household_members","provider_link"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_household_participants":{"post":{"operationId":"list_household_participants","summary":"List household participants.","description":"List household participants. An organization-scoped read using JSON filter arguments; requires participants.details.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["participants.details.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"household_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["household_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"display_name":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"inactive"},{"type":"string","const":"archived"}]},"date_of_birth":{"type":"string"},"family_name":{"type":"string"},"given_name":{"type":"string"},"household":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"status":{"type":"string"}},"required":["id","name","status"]}]},"household_members":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"display_name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"relationship":{"type":"string"},"role":{"anyOf":[{"type":"string","const":"guardian"},{"type":"string","const":"emergency_contact"},{"type":"string","const":"billing_contact"},{"type":"string","const":"other"}]},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"invited"},{"type":"string","const":"removed"}]}},"required":["id","role","status"]}},"provider_link":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"consent_status":{"anyOf":[{"type":"string","const":"granted"},{"type":"string","const":"not_required"},{"type":"string","const":"pending"},{"type":"string","const":"revoked"}]},"external_reference":{"type":"string"},"provider_visibility":{"anyOf":[{"type":"string","const":"full_profile"},{"type":"string","const":"hidden"},{"type":"string","const":"limited_profile"}]},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"revoked"}]}},"required":["id","status"]}]}},"required":["id","display_name","status","household","household_members","provider_link"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_report_card_templates":{"post":{"operationId":"list_report_card_templates","summary":"List report cards: the skills checklists students are marked against.","description":"List report cards: the skills checklists students are marked against. An organization-scoped read using JSON filter arguments; requires progress.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["progress.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"vertical":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"version":{"type":"number"},"description":{"type":"string"},"levels":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"sections":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"items":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"skill_area":{"type":"string"}},"required":["key","label"]}}},"required":["key","label","items"]}}},"required":["key","label","sections"]}},"updated_at":{"type":"string","format":"date-time"}},"required":["id","name","vertical","status","version","levels","updated_at"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_progress_roster":{"post":{"operationId":"get_progress_roster","summary":"Get a class date's skills checklist: each student's marks on one checklist level.","description":"Get a class date's skills checklist: each student's marks on one checklist level. An organization-scoped read using JSON filter arguments; requires participants.details.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["participants.details.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"level_key":{"type":"string"},"report_card_template_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["session_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"checklists":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"levels":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"sections":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"items":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"skill_area":{"type":"string"}},"required":["key","label"]}}},"required":["key","label","items"]}}},"required":["key","label","sections"]}},"name":{"type":"string"}},"required":["id","levels","name"]}},"level":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"report_card_template_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"level_key":{"type":"string"}},"required":["report_card_template_id","level_key"]}]},"offering":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"}},"required":["id","name"]},"participants":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"participant_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"participant_name":{"type":"string"},"marks":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"item_key":{"type":"string"},"mark":{"anyOf":[{"type":"string","const":"attempted"},{"type":"string","const":"completed"}]}},"required":["item_key","mark"]}}},"required":["participant_id","participant_name","marks"]}},"session":{"type":"object","additionalProperties":false,"properties":{"ends_at":{"type":"string","format":"date-time"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"starts_at":{"type":"string","format":"date-time"},"timezone":{"type":"string"}},"required":["ends_at","id","starts_at"]}},"required":["checklists","level","offering","participants","session"]}]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_participant_details":{"post":{"operationId":"get_participant_details","summary":"Get participant details.","description":"Get participant details. An organization-scoped read using JSON filter arguments; requires participants.details.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["participants.details.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"participant_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"now_ms":{"type":"string","format":"date-time"}},"required":["participant_id","now_ms"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"enrollments":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"session_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"status":{"type":"string"}},"required":["id","offering_id","offering_name","status"]}},"family_account":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"guardians":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"email":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"pending_claim_expires_at":{"type":"string","format":"date-time"},"pending_claim_token":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"claimed"},{"type":"string","const":"unclaimed"}]}},"required":["id","status"]}},"household_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"household_name":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"claimed"},{"type":"string","const":"unclaimed"}]}},"required":["guardians","household_id","household_name","status"]}]},"next_session":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"ends_at":{"type":"string","format":"date-time"},"offering_name":{"type":"string"},"starts_at":{"type":"string","format":"date-time"},"status":{"type":"string"}},"required":["id","ends_at","offering_name","starts_at","status"]}]},"participant":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"display_name":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"inactive"},{"type":"string","const":"archived"}]},"date_of_birth":{"type":"string"},"household_name":{"type":"string"},"safety":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"allergies":{"type":"string"},"emergency_contacts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"phone":{"type":"string"},"relationship":{"type":"string"}},"required":["name","phone"]}},"medical_notes":{"type":"string"},"swim_ability":{"type":"string"}},"required":["emergency_contacts"]}]}},"required":["id","display_name","status","safety"]},"skill_checklists":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"attempted_count":{"type":"number"},"completed_count":{"type":"number"},"level_key":{"type":"string"},"level_label":{"type":"string"},"marked_at":{"type":"string","format":"date-time"},"report_card_template_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"sections":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string"},"label":{"type":"string"},"mark":{"anyOf":[{"type":"string","const":"attempted"},{"type":"string","const":"completed"}]}},"required":["key","label"]}},"key":{"type":"string"},"label":{"type":"string"}},"required":["items","key","label"]}},"template_name":{"type":"string"},"total_count":{"type":"number"}},"required":["attempted_count","completed_count","level_key","level_label","marked_at","report_card_template_id","sections","template_name","total_count"]}},"swim_ability_levels":{"type":"array","items":{"type":"string"}}},"required":["enrollments","family_account","next_session","participant","skill_checklists","swim_ability_levels"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_notification_template":{"post":{"operationId":"get_notification_template","summary":"Get notification template.","description":"Get notification template. An organization-scoped read using JSON filter arguments; requires communications.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["communications.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"template_key":{"anyOf":[{"type":"string","const":"payment_account_paused"},{"type":"string","const":"payment_action_required"},{"type":"string","const":"sms_ready"},{"type":"string","const":"sms_rejected"},{"type":"string","const":"sms_suspended"},{"type":"string","const":"account_invite"},{"type":"string","const":"household_claim"},{"type":"string","const":"enrollment_confirmation"},{"type":"string","const":"invoice_issued"},{"type":"string","const":"waitlist_change"}]}},"required":["channel","template_key"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"content":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"email"},"body_text":{"type":"string"},"cta_label":{"type":"string"},"footnote":{"type":"string"},"heading":{"type":"string"},"highlight":{"type":"string"},"preview_text":{"type":"string"},"subject":{"type":"string"}},"required":["channel","body_text","cta_label","heading","preview_text","subject"]},{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"sms"},"body":{"type":"string"}},"required":["channel","body"]},{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"push"},"body":{"type":"string"},"title":{"type":"string"}},"required":["channel","body","title"]}]},"is_transactional":{"type":"boolean"},"key":{"anyOf":[{"type":"string","const":"payment_account_paused"},{"type":"string","const":"payment_action_required"},{"type":"string","const":"sms_ready"},{"type":"string","const":"sms_rejected"},{"type":"string","const":"sms_suspended"},{"type":"string","const":"account_invite"},{"type":"string","const":"household_claim"},{"type":"string","const":"enrollment_confirmation"},{"type":"string","const":"invoice_issued"},{"type":"string","const":"waitlist_change"}]},"name":{"type":"string"},"source":{"anyOf":[{"type":"string","const":"system"},{"type":"string","const":"organization"}]},"version":{"type":"number"}},"required":["channel","content","is_transactional","key","name","source","version"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_notification_templates":{"post":{"operationId":"list_notification_templates","summary":"List notification templates.","description":"List notification templates. An organization-scoped read using JSON filter arguments; requires communications.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["communications.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]}},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"},{"type":"string","const":"push"}]},"content":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"email"},"body_text":{"type":"string"},"cta_label":{"type":"string"},"footnote":{"type":"string"},"heading":{"type":"string"},"highlight":{"type":"string"},"preview_text":{"type":"string"},"subject":{"type":"string"}},"required":["channel","body_text","cta_label","heading","preview_text","subject"]},{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"sms"},"body":{"type":"string"}},"required":["channel","body"]},{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","const":"push"},"body":{"type":"string"},"title":{"type":"string"}},"required":["channel","body","title"]}]},"is_transactional":{"type":"boolean"},"key":{"anyOf":[{"type":"string","const":"payment_account_paused"},{"type":"string","const":"payment_action_required"},{"type":"string","const":"sms_ready"},{"type":"string","const":"sms_rejected"},{"type":"string","const":"sms_suspended"},{"type":"string","const":"account_invite"},{"type":"string","const":"household_claim"},{"type":"string","const":"enrollment_confirmation"},{"type":"string","const":"invoice_issued"},{"type":"string","const":"waitlist_change"}]},"name":{"type":"string"},"source":{"anyOf":[{"type":"string","const":"system"},{"type":"string","const":"organization"}]},"version":{"type":"number"}},"required":["channel","content","is_transactional","key","name","source","version"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_conversations":{"post":{"operationId":"list_conversations","summary":"List conversations.","description":"List conversations. An organization-scoped read using JSON filter arguments; requires communications.messages.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["communications.messages.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]}},"required":["pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"page":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"assigned_staff_user_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"assigned_staff_display_name":{"type":"string"},"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"}]},"counterparty_display_name":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"last_message_at":{"type":"string","format":"date-time"},"last_message_direction":{"anyOf":[{"type":"string","const":"inbound"},{"type":"string","const":"outbound"}]},"last_message_preview":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"open"},{"type":"string","const":"closed"}]},"subject":{"type":"string"}},"required":["channel","counterparty_display_name","id","last_message_at","last_message_direction","last_message_preview","status"]}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"},"split_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_status":{"anyOf":[{"type":"string","const":"SplitRecommended"},{"type":"string","const":"SplitRequired"},{"type":"null"}]}},"required":["page","continue_cursor","is_done"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_conversation":{"post":{"operationId":"get_conversation","summary":"Get conversation.","description":"Get conversation. An organization-scoped read using JSON filter arguments; requires communications.messages.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["communications.messages.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"conversation_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]}},"required":["conversation_id","pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"assigned_staff_user_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"assigned_staff_display_name":{"type":"string"},"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"}]},"counterparty_display_name":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"messages":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"body":{"type":"string"},"channel":{"anyOf":[{"type":"string","const":"email"},{"type":"string","const":"sms"}]},"delivery_status":{"anyOf":[{"type":"string","const":"queued"},{"type":"string","const":"sent"},{"type":"string","const":"delivered"},{"type":"string","const":"failed"},{"type":"string","const":"received"}]},"direction":{"anyOf":[{"type":"string","const":"inbound"},{"type":"string","const":"outbound"}]},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"occurred_at":{"type":"string","format":"date-time"},"sender_display_name":{"type":"string"},"sender_kind":{"anyOf":[{"type":"string","const":"external_contact"},{"type":"string","const":"organization_channel"},{"type":"string","const":"staff"}]}},"required":["body","channel","delivery_status","direction","id","occurred_at","sender_display_name","sender_kind"]}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"},"status":{"anyOf":[{"type":"string","const":"open"},{"type":"string","const":"closed"}]},"subject":{"type":"string"}},"required":["channel","counterparty_display_name","id","messages","continue_cursor","is_done","status"]},{"type":"null"}]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_import_batches":{"post":{"operationId":"list_import_batches","summary":"List import batches.","description":"List import batches. An organization-scoped read using JSON filter arguments; requires imports.write. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["imports.write"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"applied_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"},"created_record_count":{"type":"number"},"error_count":{"type":"number"},"failure_count":{"type":"number"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"kind":{"anyOf":[{"type":"string","const":"households"},{"type":"string","const":"participants"},{"type":"string","const":"programs"},{"type":"string","const":"offerings"},{"type":"string","const":"sessions"},{"type":"string","const":"enrollments"}]},"row_count":{"type":"number"},"skipped_count":{"type":"number"},"source_filename":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"dry_run"},{"type":"string","const":"applied"},{"type":"string","const":"failed"}]},"success_count":{"type":"number"},"warning_count":{"type":"number"}},"required":["created_at","created_record_count","error_count","failure_count","id","kind","row_count","skipped_count","status","success_count","warning_count"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/export_data":{"post":{"operationId":"export_data","summary":"Export data.","description":"Export data. An organization-scoped read using JSON filter arguments; requires exports.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["exports.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"kind":{"anyOf":[{"type":"string","const":"households"},{"type":"string","const":"participants"},{"type":"string","const":"programs"},{"type":"string","const":"offerings"},{"type":"string","const":"sessions"},{"type":"string","const":"enrollments"},{"type":"string","const":"attendance"},{"type":"string","const":"progress_summaries"},{"type":"string","const":"waiver_acceptances"}]},"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]}},"required":["kind","pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"page":{"type":"array","items":{"type":"array","items":{"type":"string"}}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"},"split_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_status":{"anyOf":[{"type":"string","const":"SplitRecommended"},{"type":"string","const":"SplitRequired"},{"type":"null"}]}},"required":["page","continue_cursor","is_done"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_audit_events":{"post":{"operationId":"list_audit_events","summary":"List audit events.","description":"List audit events. An organization-scoped read using JSON filter arguments; requires audit.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["audit.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"cursor":{"type":"string"},"action":{"type":"string"},"actor":{"type":"string"},"from_ms":{"type":"string","format":"date-time"},"target_table":{"type":"string"},"to_ms":{"type":"string","format":"date-time"}},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"actions":{"type":"array","items":{"type":"string"}},"actors":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"]}},"entities":{"type":"array","items":{"type":"string"}},"events":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"action":{"type":"string"},"actor_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"actor_kind":{"anyOf":[{"type":"string","const":"api"},{"type":"string","const":"system"},{"type":"string","const":"user"}]},"actor_label":{"type":"string"},"changes":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"field":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"}},"required":["field","from","to"]}},"created_at":{"type":"string","format":"date-time"},"details":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"link":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"kind":{"anyOf":[{"type":"string","const":"offering"},{"type":"string","const":"program"},{"type":"string","const":"roster"},{"type":"string","const":"session"},{"type":"string","const":"student"}]},"starts_at":{"type":"string","format":"date-time"}},"required":["id","kind"]},"target_id":{"type":"string"},"target_label":{"type":"string"},"target_table":{"type":"string"}},"required":["action","actor_kind","actor_label","changes","created_at","details","id"]}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"}},"required":["actions","actors","entities","events","continue_cursor","is_done"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/search_organization":{"post":{"operationId":"search_organization","summary":"Search organization.","description":"Search organization. An organization-scoped read using JSON filter arguments; requires operations.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["operations.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"query":{"type":"string"}},"required":["query"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"households":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"}},"required":["id","name"]}},"offerings":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"program_name":{"type":"string"}},"required":["id","name"]}},"programs":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"}},"required":["id","name"]}},"students":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"household_name":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["display_name","id"]}}},"required":["households","offerings","programs","students"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_organization_settings":{"post":{"operationId":"get_organization_settings","summary":"Get organization settings.","description":"Get organization settings. An organization-scoped read using JSON filter arguments; requires staff.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["staff.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"domains":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"dns_configured":{"type":"boolean"},"hostname":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"kind":{"anyOf":[{"type":"string","const":"default_subdomain"},{"type":"string","const":"custom_domain"}]},"status":{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"active"},{"type":"string","const":"disabled"}]},"vercel_verified":{"type":"boolean"}},"required":["hostname","id","kind","status"]}},"invitations":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"email":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"role":{"anyOf":[{"type":"string","const":"owner"},{"type":"string","const":"admin"},{"type":"string","const":"staff"},{"type":"string","const":"instructor"}]},"status":{"anyOf":[{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"accepted"},{"type":"string","const":"revoked"}]},{"type":"string","const":"expired"}]}},"required":["email","expires_at","id","role","status"]}},"locations":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"address_line1":{"type":"string"},"address_line2":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"kind":{"anyOf":[{"type":"string","const":"facility"},{"type":"string","const":"room"},{"type":"string","const":"pool"},{"type":"string","const":"court"},{"type":"string","const":"field"},{"type":"string","const":"virtual"},{"type":"string","const":"other"}]},"name":{"type":"string"},"postal_code":{"type":"string"},"region":{"type":"string"},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]},"timezone":{"type":"string"}},"required":["id","kind","name","slug","status"]}},"memberships":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"email":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"is_viewer":{"type":"boolean"},"role":{"anyOf":[{"type":"string","const":"owner"},{"type":"string","const":"admin"},{"type":"string","const":"staff"},{"type":"string","const":"instructor"}]},"status":{"anyOf":[{"type":"string","const":"active"},{"type":"string","const":"removed"}]}},"required":["id","is_viewer","role","status"]}},"organization":{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"logo_url":{"type":"string"},"name":{"type":"string"},"notification_defaults":{"type":"object","additionalProperties":false,"properties":{"enrollment_confirmations":{"type":"boolean"},"waitlist_updates":{"type":"boolean"}},"required":[]},"payment_instructions":{"type":"string"},"schedule_defaults":{"type":"object","additionalProperties":false,"properties":{"booking_increment_minutes":{"type":"number"},"default_capacity":{"type":"number"},"default_duration_minutes":{"type":"number"}},"required":[]},"postal_address":{"type":"string"},"reply_to_email":{"type":"string"},"slug":{"type":"string"},"swim_ability_levels":{"type":"array","items":{"type":"string"}},"timezone":{"type":"string"}},"required":["id","name","slug","swim_ability_levels"]},"resources":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"capacity":{"type":"number"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"kind":{"anyOf":[{"type":"string","const":"person"},{"type":"string","const":"space"},{"type":"string","const":"equipment"},{"type":"string","const":"other"}]},"linked_to_account":{"type":"boolean"},"location_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"},"slug":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"active"},{"type":"string","const":"archived"}]}},"required":["id","kind","linked_to_account","name","slug","status"]}}},"required":["domains","invitations","locations","memberships","organization","resources"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_invoice_workspace":{"post":{"operationId":"get_invoice_workspace","summary":"Get invoice workspace.","description":"Get invoice workspace. An organization-scoped read using JSON filter arguments; requires invoices.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["invoices.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"candidates":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"currency":{"type":"string"},"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"household_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"household_name":{"type":"string"},"offering_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"offering_name":{"type":"string"},"outstanding_minor":{"type":"number"},"participant_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"participant_name":{"type":"string"}},"required":["currency","enrollment_id","household_id","household_name","offering_id","offering_name","outstanding_minor","participant_id","participant_name"]}},"sibling_discount":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"percent"},"percent":{"type":"number"}},"required":["kind","percent"]},{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"currency":{"type":"string"},"kind":{"type":"string","const":"fixed"}},"required":["amount_minor","currency","kind"]}]},"recent":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"currency":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"invoice_number":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"open"},{"type":"string","const":"partially_paid"},{"type":"string","const":"paid"},{"type":"string","const":"void"}]},"total_minor":{"type":"number"}},"required":["currency","id","invoice_number","status","total_minor"]}}},"required":["candidates","recent"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_invoice":{"post":{"operationId":"get_invoice","summary":"Get an invoice with its line items, discounts and adjustments.","description":"Get an invoice with its line items, discounts and adjustments. An organization-scoped read using JSON filter arguments; requires invoices.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["invoices.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"invoice_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}},"required":["invoice_id"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"anyOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"currency":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"invoice_number":{"type":"string"},"issued_at":{"type":"string","format":"date-time"},"lines":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"adjustments":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"description":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"kind":{"anyOf":[{"type":"string","const":"sibling_discount"},{"type":"string","const":"promo_discount"},{"type":"string","const":"promo_release"},{"type":"string","const":"manual"}]},"reason":{"type":"string"}},"required":["amount_minor","description","id","kind"]}},"charge_minor":{"type":"number"},"checkout_path":{"type":"string"},"description":{"type":"string"},"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"net_minor":{"type":"number"},"outstanding_minor":{"type":"number"}},"required":["adjustments","charge_minor","description","enrollment_id","net_minor","outstanding_minor"]}},"status":{"anyOf":[{"type":"string","const":"open"},{"type":"string","const":"partially_paid"},{"type":"string","const":"paid"},{"type":"string","const":"void"}]},"subtotal_minor":{"type":"number"},"total_minor":{"type":"number"},"household_name":{"type":"string"}},"required":["currency","id","invoice_number","issued_at","lines","status","subtotal_minor","total_minor","household_name"]}]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_discount_program_choices":{"post":{"operationId":"list_discount_program_choices","summary":"List programs eligible for promo code scope selection.","description":"List programs eligible for promo code scope selection. An organization-scoped read using JSON filter arguments; requires invoices.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["invoices.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]}},"required":["pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"page":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"name":{"type":"string"}},"required":["id","name"]}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"},"split_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_status":{"anyOf":[{"type":"string","const":"SplitRecommended"},{"type":"string","const":"SplitRequired"},{"type":"null"}]}},"required":["page","continue_cursor","is_done"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_discount_settings":{"post":{"operationId":"get_discount_settings","summary":"Get the sibling discount and promo codes.","description":"Get the sibling discount and promo codes. An organization-scoped read using JSON filter arguments; requires invoices.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["invoices.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"inactive_pagination_opts":{"type":"object","additionalProperties":false,"properties":{"num_items":{"type":"integer","minimum":1,"maximum":100},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"end_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"type":"number"},"maximum_rows_read":{"type":"number"},"maximum_bytes_read":{"type":"number"}},"required":["num_items","cursor"]}},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"inactive_next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"promo_codes":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"active":{"type":"boolean"},"code":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"max_uses":{"type":"number"},"program_names":{"type":"array","items":{"type":"string"}},"redemption_count":{"type":"number"},"rule":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"percent"},"percent":{"type":"number"}},"required":["kind","percent"]},{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"currency":{"type":"string"},"kind":{"type":"string","const":"fixed"}},"required":["amount_minor","currency","kind"]}]}},"required":["active","code","id","redemption_count","rule"]}},"sibling_discount":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"percent"},"percent":{"type":"number"}},"required":["kind","percent"]},{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"currency":{"type":"string"},"kind":{"type":"string","const":"fixed"}},"required":["amount_minor","currency","kind"]}]}},"required":["inactive_next_cursor","promo_codes"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_custom_domains":{"post":{"operationId":"list_custom_domains","summary":"List custom domains.","description":"List custom domains. An organization-scoped read using JSON filter arguments; requires domains.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["domains.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"apex_name":{"type":"string"},"dns_checked_at":{"type":"string","format":"date-time"},"dns_configured":{"type":"boolean"},"dns_record_name":{"type":"string"},"dns_record_type":{"anyOf":[{"type":"string","const":"A"},{"type":"string","const":"CNAME"}]},"dns_record_value":{"type":"string"},"error":{"type":"string"},"hostname":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"last_checked_at":{"type":"string","format":"date-time"},"status":{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"active"},{"type":"string","const":"disabled"}]},"vercel_verified":{"type":"boolean"},"verification":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"domain":{"type":"string"},"reason":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"required":["domain","type","value"]}},"verified_at":{"type":"string","format":"date-time"}},"required":["hostname","id","status"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_sms_settings":{"post":{"operationId":"get_sms_settings","summary":"Get sms settings.","description":"Get sms settings. An organization-scoped read using JSON filter arguments; requires settings.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["settings.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"can_choose_number":{"type":"boolean"},"brand_status":{"anyOf":[{"type":"string","const":"not_started"},{"type":"string","const":"pending"},{"type":"string","const":"in_review"},{"type":"string","const":"approved"},{"type":"string","const":"action_required"},{"type":"string","const":"failed"},{"type":"string","const":"suspended"}]},"campaign_status":{"anyOf":[{"type":"string","const":"not_started"},{"type":"string","const":"pending"},{"type":"string","const":"in_review"},{"type":"string","const":"approved"},{"type":"string","const":"action_required"},{"type":"string","const":"failed"},{"type":"string","const":"suspended"}]},"carrier_review_started_at":{"type":"string","format":"date-time"},"inbox_ready":{"type":"boolean"},"number_status":{"anyOf":[{"type":"string","const":"not_started"},{"type":"string","const":"pending"},{"type":"string","const":"active"},{"type":"string","const":"action_required"},{"type":"string","const":"failed"},{"type":"string","const":"released"}]},"phone_number":{"type":"string"},"provisioning_status":{"anyOf":[{"type":"string","const":"queued"},{"type":"string","const":"in_progress"},{"type":"string","const":"waiting_on_review"},{"type":"string","const":"action_required"},{"type":"string","const":"ready"},{"type":"string","const":"suspended"}]},"provisioning_step":{"anyOf":[{"type":"string","const":"brand"},{"type":"string","const":"campaign"},{"type":"string","const":"number"},{"type":"string","const":"complete"}]},"registration_status":{"anyOf":[{"type":"string","const":"draft"},{"type":"string","const":"queued"},{"type":"string","const":"submitting"},{"type":"string","const":"pending"},{"type":"string","const":"rejected"},{"type":"string","const":"recovery"},{"type":"string","const":"approved"}]},"updated_at":{"type":"string","format":"date-time"}},"required":["can_choose_number","brand_status","campaign_status","inbox_ready","number_status"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/get_payment_capabilities":{"post":{"operationId":"get_payment_capabilities","summary":"Get payment capabilities.","description":"Get payment capabilities. An organization-scoped read using JSON filter arguments; requires payments.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["payments.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{},"required":[]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"charges_enabled":{"type":"boolean"},"connection_status":{"anyOf":[{"type":"string","const":"not_connected"},{"type":"string","const":"onboarding"},{"type":"string","const":"active"},{"type":"string","const":"restricted"},{"type":"string","const":"disconnected"}]},"disconnect_needs_retry":{"type":"boolean"},"last_synced_at":{"type":"string","format":"date-time"},"onboarding_completed":{"type":"boolean"},"payouts_enabled":{"type":"boolean"},"requirements_due":{"type":"number"},"required_actions":{"type":"array","items":{"type":"string"}},"requires_attention":{"type":"boolean"},"shows_dashboard":{"type":"boolean"},"transfers_enabled":{"type":"boolean"},"transfers_applicable":{"type":"boolean"}},"required":["charges_enabled","connection_status","disconnect_needs_retry","onboarding_completed","payouts_enabled","requirements_due","required_actions","requires_attention","shows_dashboard","transfers_enabled","transfers_applicable"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_payment_provider_states":{"post":{"operationId":"list_payment_provider_states","summary":"List payment provider states.","description":"List payment provider states. An organization-scoped read using JSON filter arguments; requires payments.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["payments.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"kind":{"anyOf":[{"type":"string","const":"checkout"},{"type":"string","const":"dispute"},{"type":"string","const":"payment"},{"type":"string","const":"payout"},{"type":"string","const":"refund"}]},"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]}},"required":["pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"page":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"currency":{"type":"string"},"failure_code":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"kind":{"anyOf":[{"type":"string","const":"checkout"},{"type":"string","const":"dispute"},{"type":"string","const":"payment"},{"type":"string","const":"payout"},{"type":"string","const":"refund"}]},"reconciliation_state":{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"matched"},{"type":"string","const":"needs_review"},{"type":"string","const":"reconciled"}]},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","kind","reconciliation_state","status","updated_at"]}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"},"split_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_status":{"anyOf":[{"type":"string","const":"SplitRecommended"},{"type":"string","const":"SplitRequired"},{"type":"null"}]}},"required":["page","continue_cursor","is_done"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_payment_webhooks":{"post":{"operationId":"list_payment_webhooks","summary":"List payment webhooks.","description":"List payment webhooks. An organization-scoped read using JSON filter arguments; requires payments.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["payments.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"pagination_opts":{"type":"object","additionalProperties":false,"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"num_items":{"type":"integer","minimum":1,"maximum":100}},"required":["cursor","num_items"]}},"required":["pagination_opts"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"object","additionalProperties":false,"properties":{"page":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"attempt_count":{"type":"number"},"event_type":{"type":"string"},"failure_code":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"object_kind":{"anyOf":[{"type":"string","const":"checkout"},{"type":"string","const":"dispute"},{"type":"string","const":"payment"},{"type":"string","const":"payout"},{"type":"string","const":"refund"}]},"processed_at":{"type":"string","format":"date-time"},"received_at":{"type":"string","format":"date-time"},"state":{"anyOf":[{"type":"string","const":"received"},{"type":"string","const":"processed"},{"type":"string","const":"ignored_stale"},{"type":"string","const":"failed"}]}},"required":["attempt_count","event_type","id","received_at","state"]}},"continue_cursor":{"type":"string"},"is_done":{"type":"boolean"},"split_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"page_status":{"anyOf":[{"type":"string","const":"SplitRecommended"},{"type":"string","const":"SplitRequired"},{"type":"null"}]}},"required":["page","continue_cursor","is_done"]},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}},"/queries/list_enrollment_payments":{"post":{"operationId":"list_enrollment_payments","summary":"List the payments recorded against enrollments, with their processor references.","description":"List the payments recorded against enrollments, with their processor references. An organization-scoped read using JSON filter arguments; requires payments.read. Pagination cursors must be reused only with the same organization, operation and filters.","tags":["organization-reads"],"x-generated":true,"x-required-scopes":["payments.read"],"x-mcp":{"expose":true,"readOnly":true,"approval":"none"},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"enrollment_ids":{"type":"array","items":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."}}},"required":["enrollment_ids"]}}}},"responses":{"200":{"description":"Successful read.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data","request_id"],"properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"enrollment_id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"payments":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"amount_minor":{"type":"number"},"currency":{"type":"string"},"id":{"type":"string","minLength":1,"description":"Opaque Soljio resource ID."},"method":{"anyOf":[{"type":"string","const":"cash"},{"type":"string","const":"check"},{"type":"string","const":"external_card"},{"type":"string","const":"stripe"},{"type":"string","const":"other"}]},"occurred_at":{"type":"string","format":"date-time"},"processor_reference":{"type":"string"},"status":{"anyOf":[{"type":"string","const":"pending"},{"type":"string","const":"succeeded"},{"type":"string","const":"failed"},{"type":"string","const":"canceled"}]}},"required":["amount_minor","currency","id","method","occurred_at","status"]}},"truncated":{"type":"boolean"}},"required":["enrollment_id","payments","truncated"]}},"request_id":{"type":"string","format":"uuid"}}}}},"headers":{"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"},"X-Request-Id":{"required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"405":{"$ref":"#/components/responses/405"},"409":{"$ref":"#/components/responses/409"},"413":{"$ref":"#/components/responses/413"},"415":{"$ref":"#/components/responses/415"},"429":{"$ref":"#/components/responses/429"},"500":{"$ref":"#/components/responses/500"}}}}},"components":{"securitySchemes":{"serviceToken":{"type":"http","scheme":"bearer","bearerFormat":"soljio_sk_<secret>","description":"Organization-scoped service token created by an owner/admin. Scope requirements are in x-required-scopes; these are service-token grants, not OAuth scopes. Revoked, expired, unknown and suspended-organization credentials all return 401."}},"parameters":{"Id":{"name":"id","in":"path","required":true,"description":"Resource ID within the token organization. Foreign and missing records are indistinguishable.","schema":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."}},"Limit":{"name":"limit","in":"query","description":"Maximum records per page. A page may be empty with a non-null cursor; continue until next_cursor is null.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},"Cursor":{"name":"cursor","in":"query","description":"Opaque cursor from this resource and organization. No snapshot isolation across pages.","schema":{"type":"string","minLength":1,"maxLength":16384}},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"Persist with the job and reuse for retries. Scoped to organization, token, command and API version. Different input with the same key returns 409. Supported automatic retry window: 24 hours.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[!-~]+$"}}},"responses":{"400":{"description":"invalid_request","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error400"},"example":{"error":{"code":"invalid_request","message":"The request is invalid."},"request_id":"00000000-0000-4000-8000-000000000001"}}}},"401":{"description":"unauthorized","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"WWW-Authenticate":{"description":"Bearer challenge; 403 includes the required scope.","required":true,"schema":{"type":"string"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error401"},"example":{"error":{"code":"unauthorized","message":"A valid service token is required."},"request_id":"00000000-0000-4000-8000-000000000001"}}}},"403":{"description":"forbidden","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"WWW-Authenticate":{"description":"Bearer challenge; 403 includes the required scope.","required":true,"schema":{"type":"string"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error403"},"example":{"error":{"code":"forbidden","message":"The service token lacks a required scope."},"request_id":"00000000-0000-4000-8000-000000000001"}}}},"404":{"description":"not_found","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error404"},"example":{"error":{"code":"not_found","message":"The requested resource was not found."},"request_id":"00000000-0000-4000-8000-000000000001"}}}},"405":{"description":"method_not_allowed","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Allow":{"required":true,"schema":{"type":"string"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error405"},"example":{"error":{"code":"method_not_allowed","message":"The method is not supported for this resource."},"request_id":"00000000-0000-4000-8000-000000000001"}}}},"409":{"description":"conflict, idempotency_conflict","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error409"},"example":{"error":{"code":"conflict","message":"The command conflicts with the current state."},"request_id":"00000000-0000-4000-8000-000000000001"}}}},"413":{"description":"payload_too_large","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error413"},"example":{"error":{"code":"payload_too_large","message":"The request body exceeds the byte limit for this operation."},"request_id":"00000000-0000-4000-8000-000000000001"}}}},"415":{"description":"unsupported_media_type","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error415"},"example":{"error":{"code":"unsupported_media_type","message":"Use application/json for command requests."},"request_id":"00000000-0000-4000-8000-000000000001"}}}},"429":{"description":"rate_limited","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Retry-After":{"required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]*$"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60","required":true}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error429"},"example":{"error":{"code":"rate_limited","message":"Too many requests. Retry after the indicated delay."},"request_id":"00000000-0000-4000-8000-000000000001"}}}},"500":{"description":"internal_error","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error500"},"example":{"error":{"code":"internal_error","message":"The request could not be completed."},"request_id":"00000000-0000-4000-8000-000000000001"}}}},"Head400":{"description":"invalid_request","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"Head401":{"description":"unauthorized","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"WWW-Authenticate":{"description":"Bearer challenge; 403 includes the required scope.","required":true,"schema":{"type":"string"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"Head403":{"description":"forbidden","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"WWW-Authenticate":{"description":"Bearer challenge; 403 includes the required scope.","required":true,"schema":{"type":"string"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"Head404":{"description":"not_found","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"Head405":{"description":"method_not_allowed","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Allow":{"required":true,"schema":{"type":"string"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"Head409":{"description":"conflict, idempotency_conflict","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"Head413":{"description":"payload_too_large","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"Head415":{"description":"unsupported_media_type","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}},"Head429":{"description":"rate_limited","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"Retry-After":{"required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]*$"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60","required":true}}},"Head500":{"description":"internal_error","headers":{"X-Request-Id":{"description":"Identifier of this HTTP attempt. A replay body retains the original request_id.","required":true,"schema":{"type":"string","format":"uuid"}},"Cache-Control":{"required":true,"schema":{"type":"string","const":"no-store"}},"RateLimit-Policy":{"description":"Structured Fields list of token and organization token-bucket policies (draft-ietf-httpapi-ratelimit-headers-11). Each request costs one quota unit.","required":true,"schema":{"type":"string","const":"\"token\";q=120;w=60, \"organization\";q=600;w=60"}},"RateLimit":{"description":"Post-consumption quota snapshot for authorized requests, including execution errors and 429s. Omitted before authorization/quota evaluation. r is the non-negative available request count; t=60 is the effective window in seconds, not a reset timestamp. Buckets refill continuously; on 429 obey Retry-After.","schema":{"type":"string","pattern":"^\"token\";r=[0-9]+;t=60, \"organization\";r=[0-9]+;t=60$"},"example":"\"token\";r=119;t=60, \"organization\";r=599;t=60"}}}},"schemas":{"Organization":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"object":{"type":"string","const":"organization"},"name":{"type":"string"},"slug":{"type":"string"},"timezone":{"type":"string"},"schedule_defaults":{"type":"object","properties":{"booking_increment_minutes":{"type":"number"},"default_capacity":{"type":"number"},"default_duration_minutes":{"type":"number"}},"required":[],"additionalProperties":false},"notification_defaults":{"type":"object","properties":{"enrollment_confirmations":{"type":"boolean"},"waitlist_updates":{"type":"boolean"}},"required":[],"additionalProperties":false}},"required":["id","organization_id","status","updated_at","object","name","slug"],"additionalProperties":false},"Location":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"object":{"type":"string","const":"location"},"name":{"type":"string"},"slug":{"type":"string"},"kind":{"type":"string"},"timezone":{"type":"string"},"address":{"type":"object","properties":{"line_1":{"type":"string"},"line_2":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"postal_code":{"type":"string"},"country":{"type":"string"}},"required":[],"additionalProperties":false}},"required":["id","organization_id","status","updated_at","object","name","slug","kind","address"],"additionalProperties":false},"Program":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"object":{"type":"string","const":"program"},"name":{"type":"string"},"slug":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"description":{"type":"string"}},"required":["id","organization_id","status","updated_at","object","name","slug","created_at"],"additionalProperties":false},"Offering":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"object":{"type":"string","const":"offering"},"name":{"type":"string"},"slug":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"program_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"description":{"type":"string"},"capacity":{"type":"number"}},"required":["id","organization_id","status","updated_at","object","name","slug","created_at","program_id"],"additionalProperties":false},"Session":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"object":{"type":"string","const":"session"},"offering_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"created_at":{"type":"string","format":"date-time"},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"timezone":{"type":"string"},"origin":{"type":"string"},"capacity":{"type":"number"}},"required":["id","organization_id","status","updated_at","object","offering_id","created_at","starts_at","ends_at"],"additionalProperties":false},"Participant":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"object":{"type":"string","const":"participant"},"created_at":{"type":"string","format":"date-time"},"display_name":{"type":"string"},"given_name":{"type":"string"},"family_name":{"type":"string"},"provider_link":{"type":"object","properties":{"status":{"type":"string"},"consent_status":{"type":"string"},"provider_visibility":{"type":"string"}},"required":["status"],"additionalProperties":false}},"required":["id","organization_id","status","updated_at","object","created_at","display_name"],"additionalProperties":false},"Enrollment":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"status":{"type":"string"},"updated_at":{"type":"string","format":"date-time"},"object":{"type":"string","const":"enrollment"},"created_at":{"type":"string","format":"date-time"},"offering_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"participant_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"session_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"payment_status":{"type":"string"},"enrolled_at":{"type":"string","format":"date-time"},"confirmed_at":{"type":"string","format":"date-time"},"waitlisted_at":{"type":"string","format":"date-time"},"canceled_at":{"type":"string","format":"date-time"},"transferred_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"}},"required":["id","organization_id","status","updated_at","object","created_at","offering_id","participant_id"],"additionalProperties":false},"Error400":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"}},"required":["error","request_id"],"additionalProperties":false},"Error401":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"}},"required":["error","request_id"],"additionalProperties":false},"Error403":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["forbidden"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"}},"required":["error","request_id"],"additionalProperties":false},"Error404":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"}},"required":["error","request_id"],"additionalProperties":false},"Error409":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["conflict","idempotency_conflict"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"}},"required":["error","request_id"],"additionalProperties":false},"Error413":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["payload_too_large"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"}},"required":["error","request_id"],"additionalProperties":false},"Error415":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unsupported_media_type"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"}},"required":["error","request_id"],"additionalProperties":false},"Error500":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["internal_error"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"}},"required":["error","request_id"],"additionalProperties":false},"list_organizationsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Organization"}},"request_id":{"type":"string","format":"uuid"},"next_cursor":{"type":["string","null"]}},"required":["data","request_id","next_cursor"],"additionalProperties":false},"get_organizationResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Organization"},"request_id":{"type":"string","format":"uuid"}},"required":["data","request_id"],"additionalProperties":false},"list_locationsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Location"}},"request_id":{"type":"string","format":"uuid"},"next_cursor":{"type":["string","null"]}},"required":["data","request_id","next_cursor"],"additionalProperties":false},"get_locationResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Location"},"request_id":{"type":"string","format":"uuid"}},"required":["data","request_id"],"additionalProperties":false},"list_programsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Program"}},"request_id":{"type":"string","format":"uuid"},"next_cursor":{"type":["string","null"]}},"required":["data","request_id","next_cursor"],"additionalProperties":false},"get_programResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Program"},"request_id":{"type":"string","format":"uuid"}},"required":["data","request_id"],"additionalProperties":false},"list_offeringsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Offering"}},"request_id":{"type":"string","format":"uuid"},"next_cursor":{"type":["string","null"]}},"required":["data","request_id","next_cursor"],"additionalProperties":false},"get_offeringResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Offering"},"request_id":{"type":"string","format":"uuid"}},"required":["data","request_id"],"additionalProperties":false},"list_sessionsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Session"}},"request_id":{"type":"string","format":"uuid"},"next_cursor":{"type":["string","null"]}},"required":["data","request_id","next_cursor"],"additionalProperties":false},"get_sessionResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Session"},"request_id":{"type":"string","format":"uuid"}},"required":["data","request_id"],"additionalProperties":false},"list_participantsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Participant"}},"request_id":{"type":"string","format":"uuid"},"next_cursor":{"type":["string","null"]}},"required":["data","request_id","next_cursor"],"additionalProperties":false},"get_participantResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Participant"},"request_id":{"type":"string","format":"uuid"}},"required":["data","request_id"],"additionalProperties":false},"list_enrollmentsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Enrollment"}},"request_id":{"type":"string","format":"uuid"},"next_cursor":{"type":["string","null"]}},"required":["data","request_id","next_cursor"],"additionalProperties":false},"get_enrollmentResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Enrollment"},"request_id":{"type":"string","format":"uuid"}},"required":["data","request_id"],"additionalProperties":false},"create_enrollmentRequest":{"type":"object","properties":{"offering_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"participant_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"session_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."}},"required":["offering_id","participant_id"],"additionalProperties":false},"create_enrollmentResult":{"type":"object","properties":{"enrollment_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"ok":{"const":true,"type":"boolean"},"status":{"type":"string","enum":["pending","confirmed","waitlisted","canceled","transferred","completed"]}},"required":["enrollment_id","organization_id","ok","status"],"additionalProperties":false},"create_enrollmentResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/create_enrollmentResult"},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}},"required":["data","request_id","idempotent_replay"],"additionalProperties":false},"cancel_enrollmentRequest":{"type":"object","properties":{"enrollment_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."}},"required":["enrollment_id"],"additionalProperties":false},"cancel_enrollmentResult":{"type":"object","properties":{"enrollment_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"ok":{"const":true,"type":"boolean"},"promoted_enrollment_id":{"type":["string","null"]}},"required":["enrollment_id","organization_id","ok","promoted_enrollment_id"],"additionalProperties":false},"cancel_enrollmentResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/cancel_enrollmentResult"},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}},"required":["data","request_id","idempotent_replay"],"additionalProperties":false},"preview_offering_scheduleRequest":{"type":"object","properties":{"offering_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"timezone":{"type":"string","minLength":1,"maxLength":256},"dates":{"type":"array","minItems":1,"maxItems":120,"items":{"type":"object","properties":{"local_date":{"type":"string","minLength":1,"maxLength":256,"format":"date"},"local_start_time":{"type":"string","minLength":1,"maxLength":256,"pattern":"^(?:[01][0-9]|2[0-3]):[0-5][0-9]$"},"local_end_time":{"type":"string","minLength":1,"maxLength":256,"pattern":"^(?:[01][0-9]|2[0-3]):[0-5][0-9]$"}},"required":["local_date","local_start_time","local_end_time"],"additionalProperties":false}}},"required":["offering_id","timezone","dates"],"additionalProperties":false},"preview_offering_scheduleResult":{"type":"object","properties":{"offering_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"timezone":{"type":"string"},"create":{"type":"array","items":{"type":"object","properties":{"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"}},"required":["starts_at","ends_at"],"additionalProperties":false}},"retain":{"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."}},"affected_enrollment_count":{"type":"number"},"requires_approval":{"type":"boolean","const":true},"preview_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"approval_token":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"input_hash":{"type":"string"}},"required":["offering_id","organization_id","timezone","create","retain","affected_enrollment_count","requires_approval","preview_id","approval_token","expires_at","input_hash"],"additionalProperties":false},"preview_offering_scheduleResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/preview_offering_scheduleResult"},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}},"required":["data","request_id","idempotent_replay"],"additionalProperties":false},"apply_offering_scheduleRequest":{"type":"object","properties":{"preview_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"approval_token":{"type":"string","minLength":1,"maxLength":256}},"required":["preview_id","approval_token"],"additionalProperties":false},"apply_offering_scheduleResult":{"type":"object","properties":{"offering_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"organization_id":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."},"session_ids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":256,"description":"Opaque Soljio ID. Do not parse or synthesize."}}},"required":["offering_id","organization_id","session_ids"],"additionalProperties":false},"apply_offering_scheduleResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/apply_offering_scheduleResult"},"request_id":{"type":"string","format":"uuid"},"idempotent_replay":{"type":"boolean"}},"required":["data","request_id","idempotent_replay"],"additionalProperties":false},"Error405":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["method_not_allowed"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"}},"required":["error","request_id"],"additionalProperties":false},"Error429":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"request_id":{"type":"string","format":"uuid"}},"required":["error","request_id"],"additionalProperties":false}}},"externalDocs":{"description":"Soljio REST API and MCP developer guide: authentication, errors, rate limits and retries.","url":"https://soljio.com/developers"}}