{"openapi":"3.0.3","info":{"title":"hito.run API","description":"HTTP API for health checks, status, brains, and demo offices.","version":"0.0.1","contact":{"url":"https://hito.run/contact"},"license":{"name":"Proprietary","url":"https://hito.run/terms"},"termsOfService":"https://hito.run/terms"},"servers":[{"url":"https://hito.run"}],"externalDocs":{"url":"https://hito.run/docs","description":"Documentation"},"tags":[{"name":"Discovery","description":"API root, capabilities, OpenAPI spec, changelog, errors"},{"name":"Health","description":"Health, status, version, ping"},{"name":"Data","description":"Brains, offices, locales"},{"name":"Streaming","description":"Server-Sent Events (live updates)"},{"name":"Schemas","description":"JSON Schema types and validation"}],"paths":{"/api":{"get":{"tags":["Discovery"],"summary":"API root","description":"Service info, apiVersion, stability, conformsTo, recommended, and _links (openapi, conformsTo, events, metrics, time, status, health, ready, requestInfo, rateLimitDemo, capabilities, versions, changelog, errors, limits, schemas, locales, brains, offices, graphql, feed, audit, usage, apiDiscovery, docs, developers, support, security, terms, privacy, roadmap, blog, faq, legal, statusPage). ETag/304. Link: rel=self, rel=describedby (HATEOAS).","operationId":"getApiRoot","responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"},"description":"Opaque validator for conditional requests"}},"content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string"},"version":{"type":"string"},"apiVersion":{"type":"string","description":"API contract version (e.g. 1); breaking changes will use new version"},"stability":{"type":"string","description":"Contract lifecycle, e.g. stable"},"conformsTo":{"type":"array","items":{"type":"string","format":"uri"},"description":"URIs of standards/specs the API conforms to"},"recommended":{"type":"array","items":{"type":"string"},"description":"Suggested first steps for API consumers (paths)"},"_links":{"type":"object","additionalProperties":{"type":"string","description":"Relative path"}}}}}}},"304":{"description":"Not Modified (send If-None-Match with ETag value)"}}}},"/api/conforms-to":{"get":{"tags":["Discovery"],"summary":"Standards discovery (conformance)","description":"Returns list of specification URIs the API conforms to, plus _meta and _links. Server-Timing. Link: rel=profile to ConformsTo schema. capabilities.conformsToEndpoint: true.","operationId":"getConformsTo","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"conformsTo":{"type":"array","items":{"type":"string","format":"uri"}},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/auth-methods":{"get":{"tags":["Discovery"],"summary":"Authentication methods discovery","description":"Returns supported auth methods (id, description, current). Link: rel=profile to AuthMethods, rel=security to /security. capabilities.authMethods: true.","operationId":"getAuthMethods","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"methods":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"description":{"type":"string"},"current":{"type":"boolean"}}}},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"security":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/encoding":{"get":{"tags":["Discovery"],"summary":"Content encoding discovery","description":"Returns encodings the API can produce (identity, gzip), default, _meta, _links. Send Accept-Encoding for compressed responses. Vary: Accept-Encoding. capabilities.encodingDiscovery: true.","operationId":"getEncoding","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"encodings":{"type":"array","items":{"type":"string"}},"default":{"type":"string"},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/cors":{"get":{"tags":["Discovery"],"summary":"CORS policy discovery","description":"Returns allowedOrigins, allowedMethods, allowPostOn, allowedHeaders, exposeHeaders, preflightMaxAge. Link: rel=profile to Cors. capabilities.corsDiscovery: true.","operationId":"getCors","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"allowedOrigins":{"type":"array","items":{"type":"string"}},"allowedMethods":{"type":"array","items":{"type":"string"}},"allowPostOn":{"type":"array","items":{"type":"string"}},"allowedHeaders":{"type":"array","items":{"type":"string"}},"exposeHeaders":{"type":"array","items":{"type":"string"}},"preflightMaxAge":{"type":"integer"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/retry-policy":{"get":{"tags":["Discovery"],"summary":"Retry policy discovery","description":"Recommended retry behavior: retryOn status codes (408, 429, 503), maxRetries, backoff hints. Honor Retry-After on 429. Link: rel=profile to RetryPolicy. capabilities.retryPolicyDiscovery: true.","operationId":"getRetryPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"retryOn":{"type":"array","items":{"type":"integer"}},"maxRetries":{"type":"integer"},"initialBackoffMs":{"type":"integer"},"maxBackoffMs":{"type":"integer"},"description":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"rateLimitDemo":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/media-types":{"get":{"tags":["Discovery"],"summary":"Media types discovery","description":"Content types the API accepts (Accept) and produces (Content-Type). Vary: Accept. Link: rel=profile to MediaTypes. capabilities.mediaTypesDiscovery: true.","operationId":"getMediaTypes","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"accept":{"type":"array","items":{"type":"string"}},"produce":{"type":"array","items":{"type":"string"}},"defaultAccept":{"type":"string"},"defaultProduce":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/well-known-paths":{"get":{"tags":["Discovery"],"summary":"Well-known paths discovery","description":"Lists well-known URIs the service provides (e.g. /.well-known/security.txt, api-discovery, change-log, openapi). Link: rel=profile to WellKnownPaths. capabilities.wellKnownPathsDiscovery: true.","operationId":"getWellKnownPaths","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"paths":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"description":{"type":"string"},"method":{"type":"string"}}}},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/link-relations":{"get":{"tags":["Discovery"],"summary":"Link relations discovery","description":"Link relation types (rel) used in Link headers and _links (self, profile, describedby, feed, successor-version). RFC 5988. Link: rel=profile to LinkRelations. capabilities.linkRelationsDiscovery: true.","operationId":"getLinkRelations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"relations":{"type":"array","items":{"type":"object","properties":{"rel":{"type":"string"},"description":{"type":"string"}}}},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/size-limits":{"get":{"tags":["Discovery"],"summary":"Size limits discovery","description":"Request/response size limits (maxRequestPayloadBytes, maxUrlLength) for client validation before sending large payloads. Link: rel=profile to SizeLimits. capabilities.sizeLimitsDiscovery: true.","operationId":"getSizeLimits","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"maxRequestPayloadBytes":{"type":"integer","description":"Max request body size in bytes"},"maxUrlLength":{"type":"integer","description":"Max URL length in characters"},"description":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"limits":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/prefer":{"get":{"tags":["Discovery"],"summary":"Prefer header discovery","description":"Prefer request header (RFC 7240) discovery: which preferences the API honors (return=minimal|representation, wait, respond-async). Link: rel=profile to PreferDiscovery. capabilities.preferDiscovery: true.","operationId":"getPrefer","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"preferences":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"},"description":{"type":"string"}}}},"reference":{"type":"string","format":"uri"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/idempotency":{"get":{"tags":["Discovery"],"summary":"Idempotency key discovery","description":"Idempotency-Key header discovery for POST/PATCH/PUT: header name, key format, TTL, supported methods and endpoints. Exactly-once semantics for retries. Link: rel=profile to IdempotencyDiscovery. capabilities.idempotencyDiscovery: true.","operationId":"getIdempotency","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"headerName":{"type":"string"},"description":{"type":"string"},"keyFormat":{"type":"string"},"ttlSeconds":{"type":"integer"},"methods":{"type":"array","items":{"type":"string"}},"supportedEndpoints":{"type":"array","items":{"type":"string"}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/cache-policy":{"get":{"tags":["Discovery"],"summary":"Cache policy discovery","description":"Cache policy: which responses are cacheable (path, maxAgeSeconds, revalidate), noStore list, revalidation (ETag/If-None-Match). Link: rel=profile to CachePolicyDiscovery. capabilities.cachePolicyDiscovery: true.","operationId":"getCachePolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"cacheable":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"maxAgeSeconds":{"type":"integer"},"revalidate":{"type":"string"}}}},"noStore":{"type":"array","items":{"type":"string"}},"defaultMaxAgeSeconds":{"type":"integer"},"revalidation":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/pagination":{"get":{"tags":["Discovery"],"summary":"Pagination policy discovery","description":"Pagination policy for list endpoints: style (offset/cursor), defaultPageSize, maxPageSize, parameter names (page, per_page), response meta. Link: rel=profile to PaginationDiscovery. capabilities.paginationDiscovery: true.","operationId":"getPagination","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"style":{"type":"string","enum":["offset","cursor"]},"defaultPageSize":{"type":"integer"},"maxPageSize":{"type":"integer"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"responseMeta":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/deprecation-policy":{"get":{"tags":["Discovery"],"summary":"Deprecation policy discovery","description":"Deprecation policy: notice period, Sunset header (RFC 8594), stability values (stable/beta/deprecated), changelog/versions links. Link: rel=profile to DeprecationPolicyDiscovery. capabilities.deprecationPolicyDiscovery: true.","operationId":"getDeprecationPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"noticePeriodMonths":{"type":"integer"},"sunsetHeader":{"type":"boolean"},"reference":{"type":"string","format":"uri"},"stabilityValues":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"description":{"type":"string"}}}},"changelogLink":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"changelog":{"type":"object","properties":{"href":{"type":"string"}}},"versions":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/slo":{"get":{"tags":["Discovery","Health"],"summary":"SLO discovery","description":"Service Level Objectives: availability and latency targets, measurement windows, status page link. For client retry/SLA awareness. Link: rel=profile to SloDiscovery. capabilities.sloDiscovery: true.","operationId":"getSlo","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"objectives":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"target":{"type":"number"},"unit":{"type":"string"},"description":{"type":"string"},"measurementWindow":{"type":"string"}}}},"statusPage":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"status":{"type":"object","properties":{"href":{"type":"string"}}},"health":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/query-policy":{"get":{"tags":["Discovery"],"summary":"Query policy discovery","description":"Query/filter/sort policy for collection endpoints: filter operators (eq, ne, contains, in), sort parameter, fields (sparse fieldsets). Link: rel=profile to QueryPolicyDiscovery. capabilities.queryPolicyDiscovery: true.","operationId":"getQueryPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"filter":{"type":"object","properties":{"parameter":{"type":"string"},"operators":{"type":"array","items":{"type":"object","properties":{"op":{"type":"string"},"description":{"type":"string"}}}},"format":{"type":"string"}}},"sort":{"type":"object","properties":{"parameter":{"type":"string"},"format":{"type":"string"}}},"fields":{"type":"object","properties":{"parameter":{"type":"string"},"description":{"type":"string"},"example":{"type":"string"}}},"applicableEndpoints":{"type":"array","items":{"type":"string"}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"pagination":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/webhooks":{"get":{"tags":["Discovery"],"summary":"Webhook discovery","description":"Webhook policy (stub): supported, planned, events, subscriptionUrl, signature (HMAC-SHA256), delivery retry. capabilities.webhooks false; webhooksDiscovery true for policy. Link: rel=profile to WebhooksDiscovery.","operationId":"getWebhooks","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"supported":{"type":"boolean"},"planned":{"type":"boolean"},"description":{"type":"string"},"events":{"type":"array","items":{"type":"string"}},"subscriptionUrl":{"type":["string","null"]},"signatureAlgorithm":{"type":"string"},"signatureHeader":{"type":"string"},"deliveryRetry":{"type":"object","properties":{"maxAttempts":{"type":"integer"},"backoffSeconds":{"type":"array","items":{"type":"integer"}}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"events":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/accept-policy":{"get":{"tags":["Discovery"],"summary":"Accept policy discovery","description":"Content negotiation: Accept, Accept-Language, Accept-Encoding with default and supported values. Link: rel=profile to AcceptPolicyDiscovery. capabilities.acceptPolicyDiscovery: true.","operationId":"getAcceptPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"headers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"default":{"type":"string"},"supported":{"type":"array","items":{"type":"string"}}}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"mediaTypes":{"type":"object","properties":{"href":{"type":"string"}}},"encoding":{"type":"object","properties":{"href":{"type":"string"}}},"locales":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/bulk-policy":{"get":{"tags":["Discovery"],"summary":"Bulk policy discovery","description":"Bulk/batch operation policy: supported, endpoint, maxOperationsPerRequest, supportedMethods, request/response format. capabilities.bulk false; bulkPolicyDiscovery true for policy. Link: rel=profile to BulkPolicyDiscovery.","operationId":"getBulkPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"supported":{"type":"boolean"},"planned":{"type":"boolean"},"description":{"type":"string"},"endpoint":{"type":"string"},"maxOperationsPerRequest":{"type":"integer"},"supportedMethods":{"type":"array","items":{"type":"string"}},"requestFormat":{"type":"string"},"responseFormat":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"bulk":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/errors-policy":{"get":{"tags":["Discovery"],"summary":"Errors policy discovery","description":"Error response policy: RFC 7807 Problem Details (Accept: application/problem+json), error catalog link, standard codes, correlation header. Link: rel=profile to ErrorsPolicyDiscovery. capabilities.errorsPolicyDiscovery: true.","operationId":"getErrorsPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"problemDetails":{"type":"boolean"},"problemDetailsAccept":{"type":"string"},"reference":{"type":"string","format":"uri"},"catalogLink":{"type":"string"},"standardCodes":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"integer"},"description":{"type":"string"}}}},"correlationHeader":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"errors":{"type":"object","properties":{"href":{"type":"string"}}},"schemas":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/timing-policy":{"get":{"tags":["Discovery","Health"],"summary":"Timing policy discovery","description":"Server-Timing header (RFC 9530) policy: which endpoints send timing metrics, header name, format. Link: rel=profile to TimingPolicyDiscovery. capabilities.timingPolicyDiscovery: true.","operationId":"getTimingPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"enabled":{"type":"boolean"},"reference":{"type":"string","format":"uri"},"headerName":{"type":"string"},"endpoints":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"metric":{"type":"string"},"description":{"type":"string"}}}},"format":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"observability":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/security-policy":{"get":{"tags":["Discovery"],"summary":"Security policy discovery","description":"Security policy: HSTS, CORS, security.txt (RFC 9116), auth summary, response headers (Permissions-Policy, Referrer-Policy, X-Content-Type-Options). Link: rel=profile to SecurityPolicyDiscovery. capabilities.securityPolicyDiscovery: true.","operationId":"getSecurityPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"hsts":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxAge":{"type":"integer"},"includeSubDomains":{"type":"boolean"},"description":{"type":"string"}}},"cors":{"type":"object","properties":{"discovery":{"type":"string"},"description":{"type":"string"}}},"securityTxt":{"type":"object","properties":{"path":{"type":"string"},"reference":{"type":"string","format":"uri"}}},"auth":{"type":"object","properties":{"required":{"type":"boolean"},"discovery":{"type":"string"},"description":{"type":"string"}}},"headers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"},"description":{"type":"string"}}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"cors":{"type":"object","properties":{"href":{"type":"string"}}},"authMethods":{"type":"object","properties":{"href":{"type":"string"}}},"securityTxt":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/documentation":{"get":{"tags":["Discovery"],"summary":"Documentation discovery","description":"Central documentation discovery: resources (docs, developers, openapi, changelog, status) with href and type. Link: rel=profile to DocumentationDiscovery. capabilities.documentationDiscovery: true.","operationId":"getDocumentation","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"resources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"href":{"type":"string"},"type":{"type":"string"},"description":{"type":"string"}}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"docs":{"type":"object","properties":{"href":{"type":"string"}}},"developers":{"type":"object","properties":{"href":{"type":"string"}}},"openapi":{"type":"object","properties":{"href":{"type":"string"}}},"changelog":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/rate-limit-policy":{"get":{"tags":["Discovery"],"summary":"Rate limit policy discovery","description":"Rate limit policy: RFC 9211 headers (RateLimit-Limit, Remaining, Reset), on429 (Retry-After), limits and retry-policy links. Link: rel=profile to RateLimitPolicyDiscovery. capabilities.rateLimitPolicyDiscovery: true.","operationId":"getRateLimitPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"rfc9211":{"type":"boolean"},"responseHeaders":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}}}},"on429":{"type":"object","properties":{"status":{"type":"integer"},"retryAfter":{"type":"boolean"},"description":{"type":"string"}}},"demoEndpoint":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"limits":{"type":"object","properties":{"href":{"type":"string"}}},"retryPolicy":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/conditional-requests":{"get":{"tags":["Discovery"],"summary":"Conditional requests policy discovery","description":"ETag / If-None-Match / 304 policy: which endpoints support conditional requests, request/response headers, onMatch (304). Link: rel=profile to ConditionalRequestsDiscovery. capabilities.conditionalRequestsDiscovery: true.","operationId":"getConditionalRequestsPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"supported":{"type":"boolean"},"requestHeader":{"type":"string"},"responseHeader":{"type":"string"},"onMatch":{"type":"object","properties":{"status":{"type":"integer"},"description":{"type":"string"}}},"endpoints":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"note":{"type":"string"}}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"cachePolicy":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/resilience-policy":{"get":{"tags":["Discovery"],"summary":"Resilience policy discovery","description":"Recommended client resilience: suggested timeouts (connect, read), failure semantics (retryable vs doNotRetry status codes), circuit-breaker hints. Links to retry-policy, slo, rate-limit-policy. Link: rel=profile to ResiliencePolicyDiscovery. capabilities.resiliencePolicyDiscovery: true.","operationId":"getResiliencePolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"suggestedTimeouts":{"type":"object","properties":{"connectTimeoutMs":{"type":"integer"},"readTimeoutMs":{"type":"integer"},"description":{"type":"string"}}},"failureSemantics":{"type":"object","properties":{"retryable":{"type":"array","items":{"type":"integer"}},"doNotRetry":{"type":"array","items":{"type":"integer"}},"description":{"type":"string"}}},"circuitBreakerHints":{"type":"object","properties":{"treatAsFailure":{"type":"array","items":{"type":"integer"}},"description":{"type":"string"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"retryPolicy":{"type":"object","properties":{"href":{"type":"string"}}},"slo":{"type":"object","properties":{"href":{"type":"string"}}},"rateLimitPolicy":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/consistency-policy":{"get":{"tags":["Discovery"],"summary":"Consistency policy discovery","description":"Read consistency model (eventual/strong), readYourWrites, monotonicReads, staleReadsAllowed, cachingInteraction. Links to cache-policy, conditional-requests, pagination. Link: rel=profile to ConsistencyPolicyDiscovery. capabilities.consistencyPolicyDiscovery: true.","operationId":"getConsistencyPolicy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"model":{"type":"string"},"readYourWrites":{"type":"boolean"},"monotonicReads":{"type":"boolean"},"staleReadsAllowed":{"type":"boolean"},"cachingInteraction":{"type":"string"},"notes":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}},"cachePolicy":{"type":"object","properties":{"href":{"type":"string"}}},"conditionalRequests":{"type":"object","properties":{"href":{"type":"string"}}},"pagination":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/events":{"get":{"tags":["Streaming"],"summary":"Server-Sent Events stream","description":"Live event stream (text/event-stream). Sends connected and heartbeat events. Use for dashboards and real-time updates.","operationId":"getEvents","responses":{"200":{"description":"SSE stream","content":{"text/event-stream":{"schema":{"type":"string","description":"SSE format: event + data lines"}}}}}}},"/api/metrics":{"get":{"tags":["Health"],"summary":"Observability metrics","description":"Lightweight counts (brains, locales, schemaTypes) and _links. Server-Timing, Link: rel=profile to Metrics. No-store.","operationId":"getMetrics","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string"},"version":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"metrics":{"type":"object","properties":{"brains":{"type":"integer"},"locales":{"type":"integer"},"schemaTypes":{"type":"integer"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/observability":{"get":{"tags":["Discovery","Health"],"summary":"Observability discovery","description":"Single entry point for monitoring: links to metrics, health, status, ready; traceContext and serverTiming flags. No-store. Link: rel=profile to Observability schema. capabilities.observability: true.","operationId":"getObservability","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"metrics":{"type":"object","properties":{"href":{"type":"string"},"description":{"type":"string"}}},"health":{"type":"object","properties":{"href":{"type":"string"},"description":{"type":"string"}}},"status":{"type":"object","properties":{"href":{"type":"string"},"description":{"type":"string"}}},"ready":{"type":"object","properties":{"href":{"type":"string"},"description":{"type":"string"}}},"traceContext":{"type":"boolean"},"serverTiming":{"type":"boolean"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/time":{"get":{"tags":["Health"],"summary":"Server time","description":"Returns server time (iso, unix) and _links (self, profile). Server-Timing, Link: rel=profile to Time. No-store.","operationId":"getTime","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string"},"iso":{"type":"string","format":"date-time"},"unix":{"type":"integer","description":"Unix timestamp (seconds)"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/health":{"get":{"tags":["Health"],"summary":"Health check","description":"Returns status, service, timestamp, checks, and _links. Server-Timing, Link: rel=profile to Health. Want-Digest → Content-Digest.","operationId":"getHealth","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"service":{"type":"string","example":"hito.run"},"timestamp":{"type":"string","format":"date-time"},"checks":{"type":"object","properties":{"api":{"type":"string","example":"ok"}},"description":"Extensible (future: db, cache)"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/version":{"get":{"tags":["Health"],"summary":"App version","description":"Returns version, service, and _links (self, profile). Content-Digest, Server-Timing, Link: rel=profile. ETag/304.","operationId":"getVersion","responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"},"description":"Opaque validator for conditional requests"}},"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"string"},"service":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}},"304":{"description":"Not Modified (send If-None-Match with ETag value)"}}}},"/api/status":{"get":{"tags":["Health"],"summary":"Combined status","description":"Health + version in one response with _links. Server-Timing, Link: rel=profile to Status.","operationId":"getStatus","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"service":{"type":"string"},"version":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/ping":{"get":{"tags":["Health"],"summary":"Connectivity check","description":"Returns { pong, _links }. ETag/304. Link: rel=profile to Ping schema.","operationId":"getPing","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"pong":{"type":"boolean"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}},"304":{"description":"Not Modified (send If-None-Match with ETag)"}}}},"/api/ready":{"get":{"tags":["Health"],"summary":"Readiness probe","description":"Returns 200 with ready, service, _links. Link: rel=profile to Ready schema. capabilities.readinessProbe.","operationId":"getReady","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ready":{"type":"boolean"},"service":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/request-info":{"get":{"tags":["Discovery"],"summary":"Request metadata for support","description":"Returns method, path, _links. X-Request-ID in headers. Server-Timing, Link: rel=profile to RequestInfo. capabilities.requestInfo.","operationId":"getRequestInfo","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"method":{"type":"string"},"path":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/brains":{"get":{"tags":["Data"],"summary":"List brains","description":"List available brains with _meta.count. Server-Timing. Link: rel=profile to BrainsList.","operationId":"getBrains","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"brains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}}}},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}}}}}}}}}},"/api/offices":{"get":{"tags":["Data"],"summary":"List offices (demo)","description":"Demo list of offices with hitos and _meta.count. ETag/304. Server-Timing. Link: rel=profile to OfficesList.","operationId":"getOffices","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"offices":{"type":"array","items":{"$ref":"#/components/schemas/OfficeWithHitos"}},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}}}}}}},"304":{"description":"Not Modified (send If-None-Match with ETag)"}}}},"/api/openapi":{"get":{"tags":["Discovery"],"summary":"OpenAPI spec","description":"This document (OpenAPI 3.0 JSON).","operationId":"getOpenApi","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/locales":{"get":{"tags":["Data"],"summary":"Supported locales","description":"List supported locales for i18n with _meta.count. ETag/304. Accept-Language negotiation.","operationId":"getLocales","responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"},"description":"Opaque validator for conditional requests"}},"content":{"application/json":{"schema":{"type":"object","properties":{"locales":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"default":{"type":"boolean"}}}},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}}}}}}},"304":{"description":"Not Modified (send If-None-Match with ETag value)"}}}},"/api/capabilities":{"get":{"tags":["Discovery"],"summary":"Capabilities (feature discovery)","description":"Returns service, version, capabilities, _links. JSON bodies include _links where applicable (capabilities.hateoasBodyLinks). ETag/304.","operationId":"getCapabilities","responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"},"description":"Opaque validator for conditional requests"}},"content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string"},"version":{"type":"string"},"capabilities":{"type":"object","properties":{"openapi":{"type":"boolean"},"openApiVersion":{"type":"string","description":"OpenAPI spec version (e.g. 3.0.3)"},"openapiYaml":{"type":"boolean","description":"GET /api/openapi accepts Accept: application/openapi+yaml for YAML"},"apiVersioning":{"type":"boolean"},"apiVersionLifecycle":{"type":"boolean","description":"GET /api/versions returns version lifecycle (stability, sunset)"},"conformsToEndpoint":{"type":"boolean","description":"GET /api/conforms-to lists supported specification URIs"},"sse":{"type":"boolean"},"metrics":{"type":"boolean"},"serverTime":{"type":"boolean"},"conditionalRequests":{"type":"boolean"},"correlationId":{"type":"boolean"},"hateoas":{"type":"boolean","description":"Link header with rel=self, rel=describedby on GET /api"},"hateoasBodyLinks":{"type":"boolean","description":"JSON responses include _links (self, profile) in body where applicable"},"locales":{"type":"boolean"},"rateLimitHeaders":{"type":"boolean"},"retryAfterOn429":{"type":"boolean","description":"429 responses include Retry-After (e.g. /api/rate-limit-demo)"},"requestInfo":{"type":"boolean","description":"GET /api/request-info returns method, path; X-Request-ID in headers"},"limitsEndpoint":{"type":"boolean"},"schemas":{"type":"boolean"},"errorsCatalog":{"type":"boolean"},"changelog":{"type":"boolean"},"webhooks":{"type":"boolean"},"auth":{"type":"boolean"},"authMethods":{"type":"boolean","description":"GET /api/auth-methods returns supported auth methods"},"encodingDiscovery":{"type":"boolean","description":"GET /api/encoding returns supported content encodings"},"corsDiscovery":{"type":"boolean","description":"GET /api/cors returns CORS policy"},"retryPolicyDiscovery":{"type":"boolean","description":"GET /api/retry-policy returns recommended retry behavior"},"mediaTypesDiscovery":{"type":"boolean","description":"GET /api/media-types returns accept/produce content types"},"wellKnownPathsDiscovery":{"type":"boolean","description":"GET /api/well-known-paths lists well-known URIs"},"linkRelationsDiscovery":{"type":"boolean","description":"GET /api/link-relations lists rel types (RFC 5988)"},"sizeLimitsDiscovery":{"type":"boolean","description":"GET /api/size-limits returns request/response size limits"},"preferDiscovery":{"type":"boolean","description":"GET /api/prefer returns Prefer header (RFC 7240) preferences"},"idempotencyDiscovery":{"type":"boolean","description":"GET /api/idempotency returns Idempotency-Key header policy"},"cachePolicyDiscovery":{"type":"boolean","description":"GET /api/cache-policy returns cache and revalidation policy"},"paginationDiscovery":{"type":"boolean","description":"GET /api/pagination returns pagination policy for list endpoints"},"deprecationPolicyDiscovery":{"type":"boolean","description":"GET /api/deprecation-policy returns deprecation and Sunset (RFC 8594) policy"},"sloDiscovery":{"type":"boolean","description":"GET /api/slo returns Service Level Objectives"},"queryPolicyDiscovery":{"type":"boolean","description":"GET /api/query-policy returns filter/sort/fields policy"},"webhooksDiscovery":{"type":"boolean","description":"GET /api/webhooks returns webhook policy (stub; supported may be false)"},"acceptPolicyDiscovery":{"type":"boolean","description":"GET /api/accept-policy returns content negotiation (Accept*) policy"},"bulkPolicyDiscovery":{"type":"boolean","description":"GET /api/bulk-policy returns bulk/batch operation policy"},"errorsPolicyDiscovery":{"type":"boolean","description":"GET /api/errors-policy returns error response (RFC 7807, catalog) policy"},"timingPolicyDiscovery":{"type":"boolean","description":"GET /api/timing-policy returns Server-Timing (RFC 9530) policy"},"securityPolicyDiscovery":{"type":"boolean","description":"GET /api/security-policy returns security (HSTS, CORS, security.txt, auth) policy"},"documentationDiscovery":{"type":"boolean","description":"GET /api/documentation returns documentation resources (docs, developers, openapi, changelog)"},"rateLimitPolicyDiscovery":{"type":"boolean","description":"GET /api/rate-limit-policy returns rate limit (RFC 9211, 429) policy"},"conditionalRequestsDiscovery":{"type":"boolean","description":"GET /api/conditional-requests returns ETag/If-None-Match/304 policy"},"resiliencePolicyDiscovery":{"type":"boolean","description":"GET /api/resilience-policy returns resilience (timeouts, failure semantics, circuit-breaker hints) policy"},"consistencyPolicyDiscovery":{"type":"boolean","description":"GET /api/consistency-policy returns read consistency model and caching interaction policy"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}},"304":{"description":"Not Modified (send If-None-Match with ETag value)"}}}},"/api/versions":{"get":{"tags":["Discovery"],"summary":"API version lifecycle","description":"Supported versions with stability, apiRoot, optional sunset (RFC 8594). For client migration planning. Link: rel=profile to ApiVersions. capabilities.apiVersionLifecycle: true.","operationId":"getVersions","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"versions":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string"},"stability":{"type":"string","enum":["stable","beta","deprecated"]},"apiRoot":{"type":"string"},"sunset":{"type":["string","null"],"format":"date"}}}},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/schemas":{"get":{"tags":["Schemas"],"summary":"List schema type names (HATEOAS)","description":"Returns schema type names with _links (HATEOAS) and _meta (count, schemaVersion). Server-Timing.","operationId":"getSchemas","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"schemas":{"type":"array","items":{"type":"string"},"example":["Office","Hito"]},"_links":{"type":"object","additionalProperties":{"type":"object","properties":{"href":{"type":"string"}}}},"_meta":{"type":"object","properties":{"count":{"type":"integer"},"schemaVersion":{"type":"string","example":"2020-12"}}}}}}}}}}},"/api/rate-limit-demo":{"get":{"tags":["Discovery"],"summary":"429 rate-limit demo","description":"Always returns 429 with Retry-After for client backoff testing. capabilities.retryAfterOn429.","operationId":"getRateLimitDemo","responses":{"429":{"description":"Too Many Requests (demo); Retry-After header in seconds","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","example":"RateLimitExceeded"},"message":{"type":"string"},"retryAfter":{"type":"integer"}}}}}}}}},"/api/bulk":{"post":{"tags":["Discovery"],"summary":"Bulk read (stub)","description":"Returns 501 Not Implemented. Bulk/batch read is planned. capabilities.bulk: false.","operationId":"postBulk","responses":{"501":{"description":"Not Implemented","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","example":"NotImplemented"},"message":{"type":"string"},"_links":{"type":"object","properties":{"docs":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}}}}},"/api/schemas/{type}":{"get":{"tags":["Schemas"],"summary":"JSON Schema for type","description":"Returns JSON Schema (draft 2020-12) for Office, Hito, Brain, Integration, Health, Error, Metrics, Time, Capabilities, ErrorCatalog, Limits, Usage, Changelog, Status, Version, Ping, ApiRoot, Locales, BrainsList, OfficesList, IntegrationsList, SchemasList, Feed, GraphQLResponse, AuditEvents. 404 for unknown type.","operationId":"getSchemaByType","parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string","enum":["Office","Hito","Brain","Integration","Health","Error","Metrics","Time","Capabilities","ErrorCatalog","Limits","Usage","Changelog","Status","Version","Ping","ApiRoot","Locales","BrainsList","OfficesList","IntegrationsList","SchemasList","Feed","GraphQLResponse","AuditEvents"]}}],"responses":{"200":{"description":"OK – JSON Schema object"},"404":{"description":"Schema type not found"}}}},"/api/changelog":{"get":{"tags":["Discovery"],"summary":"API releases","description":"API releases with _meta.count and _links (self, profile). Link: rel=profile to Changelog schema. ETag/304.","operationId":"getChangelog","responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"},"description":"Opaque validator for conditional requests"}},"content":{"application/json":{"schema":{"type":"object","properties":{"releases":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string"},"date":{"type":"string"},"summary":{"type":"string"}}}},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}},"304":{"description":"Not Modified (send If-None-Match with ETag value)"}}}},"/api/limits":{"get":{"tags":["Discovery"],"summary":"Rate limit policy","description":"Returns limit, windowSeconds, description, and _links (self, profile). Server-Timing, Link: rel=profile. ETag/304.","operationId":"getLimits","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"type":"integer"},"windowSeconds":{"type":"integer"},"description":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}},"304":{"description":"Not Modified (send If-None-Match with ETag value)"}}}},"/api/usage":{"get":{"tags":["Discovery"],"summary":"Usage placeholder (future billing)","description":"Stub with _links (self, profile). Server-Timing, Link: rel=profile to Usage. ETag/304.","operationId":"getUsage","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"period":{"type":"string"},"windowSeconds":{"type":"integer"},"requestsUsed":{"type":"integer"},"requestsLimit":{"type":"integer"},"description":{"type":"string"},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}},"304":{"description":"Not Modified (send If-None-Match with ETag value)"}}}},"/api/errors":{"get":{"tags":["Discovery"],"summary":"Error code catalog","description":"Error code catalog with _meta.count and _links (self, profile). Link: rel=profile to ErrorCatalog. ETag/304.","operationId":"getErrors","responses":{"200":{"description":"OK","headers":{"ETag":{"schema":{"type":"string"},"description":"Opaque validator for conditional requests"}},"content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"httpStatus":{"type":"number"}}}},"_meta":{"type":"object","properties":{"count":{"type":"integer"}}},"_links":{"type":"object","properties":{"self":{"type":"object","properties":{"href":{"type":"string"}}},"profile":{"type":"object","properties":{"href":{"type":"string"}}}}}}}}}},"304":{"description":"Not Modified (send If-None-Match with ETag value)"}}}}},"components":{"schemas":{"OfficeWithHitos":{"type":"object","properties":{"id":{"type":"string"},"companyId":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"hitos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"officeId":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"brainId":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}}}}}}}}