{"contract":"openacai-resource-sync","status":"ready","generatedAtUtc":"2026-07-07T18:52:52.5952077Z","schemaVersion":"1.4","minimumClient":{"android":"0.1.0","ios":"0.1.0","web":"2026.07"},"currentSync":{"token":"841cda3c2a9254a971922908253775fada1731344a2f6347503a913031bf4161","tokenType":"resources-json-sha256","resourceCount":38,"generatedAt":"2026-07-07T18:49:02.0712514Z","reviewedAt":"2026-07-06T15:49:01.8036010Z","etag":"\u00224dfb50e3abfc76c4524674326beff6a02fac43df240d1dbbbf7a74ba9ee52aba\u0022","indexAvailable":true,"manifestAvailable":true,"deltaAvailable":true,"searchAvailable":true},"packageSync":{"token":"","tokenType":"read-from-mobile-package","packageDocumentCount":0,"requiredPublicContracts":0,"requiredAvailableContracts":0,"source":"https://openacai.ong/.well-known/openacai-mobile-package.json","note":"The mobile package is the source of document hashes, byte sizes, revisioned URLs, and availability. This sync document intentionally avoids copying package hashes so package verification remains acyclic.","validatePackageBeforeApplyingDataSets":true,"useLastKnownGoodPackageOnFailure":true},"privacy":{"publicOnly":true,"containsSecrets":false,"containsPrivateCaseData":false,"containsHelpSeekerMessages":false,"safeForDeviceCache":true,"publicResourceData":"May be cached on device and at Cloudflare edge.","savedResourceLists":"Store locally on the user\u0027s device unless a future signed-in feature explicitly asks to sync.","caseData":"Never include private case data in public sync documents.","analytics":"Do not send search text, names, phone numbers, emails, or message bodies through resource sync analytics."},"refreshPolicy":{"bootstrapMaxAgeSeconds":600,"resourceMaxAgeSeconds":14400,"staleWhileRevalidateSeconds":86400,"recommendedBackgroundRefreshHours":12,"offlineFallback":"Use the last successful resources.json snapshot and show its generatedAt/reviewedAt timestamps."},"syncStrategy":{"startupOrder":["mobile-package","openacai-sync","app-config","public-exports","resource-manifest","resource-delta","resource-index","resource-search","resources-json","forms-library","form-packets","help-guides","help-planner","games-catalog","evidence-library","intake-schema"],"firstInstall":"Download resources-json plus resource-search, verify package and manifest hashes, then store both atomically as the local search baseline.","normalRefresh":"Fetch the mobile package and sync contract first; if currentSync.token matches the local resources-json sha256, keep the local snapshot.","lightweightChangeCheck":"Fetch resource-delta and apply it only when fromToken exactly matches the local resources-json sha256.","fullRefreshWhen":["no local resources-json snapshot exists","currentSync.token is empty or changed and resource-delta.fromToken does not match the local token","resource-delta.fullExportRecommended is true","resource-delta.removedCount is greater than zero","resource-manifest sha256 does not match the downloaded resources-json payload","any required sync document is missing, malformed, or older than the accepted stale window"],"atomicReplace":true,"keepLastKnownGoodOnFailure":true,"showDataAgeWhenOffline":true,"neverSendSearchTextToAnalytics":true},"publicDataSets":[{"id":"resources-json","group":"resources","packageDocumentId":"resource-manifest","stableUrl":"https://openacai.com/resources.json","apiUrl":"https://openacai.com/api/resources","format":"json","status":"ready","required":true,"offlineSafe":true,"safeForDeviceCache":true,"syncToken":"841cda3c2a9254a971922908253775fada1731344a2f6347503a913031bf4161","syncTokenType":"resources-json-sha256","itemCount":38,"generatedAtUtc":"2026-07-07T18:49:02.0712514Z","reviewedAtUtc":"2026-07-06T15:49:01.8036010Z","validateWith":"resource-manifest","deltaDocumentId":"resource-delta","replaceWhen":"resource-manifest hash changes, resource-delta cannot be applied, or no local snapshot exists","localStorage":"replace atomically; keep last known good resources.json","privacy":"Public resource records only. Do not store resource search text or saved-list labels in analytics."},{"id":"resource-search","group":"resources","packageDocumentId":"resource-search","stableUrl":"https://openacai.ong/.well-known/openacai-resource-search.json","apiUrl":"https://openacai.ong/api/v1/mobile/resource-search","format":"json","status":"package-validated","required":true,"offlineSafe":true,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"Compact search terms, aliases, category labels, and term-to-resource mappings for offline resource search.","replaceWhen":"Replace alongside resources-json after package hash validation; keep the last known good search index if refresh fails.","localStorage":"May be cached with package hash validation and last-known-good fallback.","privacy":"Public resource lookup metadata only. Search text stays on device and is never sent to analytics."},{"id":"resources-csv","group":"resources","packageDocumentId":"","stableUrl":"https://openacai.com/resources.csv","apiUrl":"https://openacai.com/api/resources.csv","format":"csv","status":"export","required":false,"offlineSafe":true,"safeForDeviceCache":true,"syncToken":"841cda3c2a9254a971922908253775fada1731344a2f6347503a913031bf4161","syncTokenType":"resources-json-sha256","itemCount":38,"generatedAtUtc":"2026-07-07T18:49:02.0712514Z","reviewedAtUtc":"2026-07-06T15:49:01.8036010Z","validateWith":"resource-manifest plus HTTP validators when present","deltaDocumentId":"","replaceWhen":"Only when a client explicitly needs spreadsheet export data.","localStorage":"optional; do not block startup if unavailable","privacy":"Public export only."},{"id":"forms-library","group":"forms","packageDocumentId":"forms-library","stableUrl":"https://openacai.ong/.well-known/openacai-forms-library.json","apiUrl":"https://openacai.ong/api/v1/mobile/forms-library","format":"json","status":"package-validated","required":true,"offlineSafe":true,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"Local form workbench source list, official links, field guidance, and printable worksheet metadata.","replaceWhen":"Replace when the mobile package sha256 changes; keep local worksheet answers separate and device-local only.","localStorage":"May be cached with package hash validation and last-known-good fallback.","privacy":"Public form metadata only. Never sync worksheet answers through this document."},{"id":"form-packets","group":"forms","packageDocumentId":"form-packets","stableUrl":"https://openacai.ong/.well-known/openacai-form-packets.json","apiUrl":"https://openacai.ong/api/v1/mobile/form-packets","format":"json","status":"package-validated","required":true,"offlineSafe":true,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"Public-safe local-only form packet templates for print, copy, download, and native prep screens.","replaceWhen":"Replace when the mobile package sha256 changes; clear local draft data only when the user asks.","localStorage":"May be cached with package hash validation and last-known-good fallback.","privacy":"Templates only. No official submission, no autosave, no worksheet answers, and no private case data."},{"id":"help-guides","group":"help","packageDocumentId":"help-guides","stableUrl":"https://openacai.ong/.well-known/openacai-help-guides.json","apiUrl":"https://openacai.ong/api/v1/mobile/help-guides","format":"json","status":"package-validated","required":true,"offlineSafe":true,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"Need-based help guides, preparation checklists, and matching resource IDs.","replaceWhen":"Replace when the mobile package sha256 changes or resource token changes.","localStorage":"May be cached with package hash validation and last-known-good fallback.","privacy":"Public guidance only; do not attach names, messages, or precise location."},{"id":"help-planner","group":"help","packageDocumentId":"help-planner","stableUrl":"https://openacai.ong/.well-known/openacai-help-planner.json","apiUrl":"https://openacai.ong/api/v1/mobile/help-planner","format":"json","status":"package-validated","required":true,"offlineSafe":true,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"Plain-language next-step planner paths for common local needs.","replaceWhen":"Replace with the mobile package; keep last known good planner for offline use.","localStorage":"May be cached with package hash validation and last-known-good fallback.","privacy":"Public prompts only; user notes stay local unless a future explicit consent flow exists."},{"id":"games-catalog","group":"games","packageDocumentId":"games-catalog","stableUrl":"https://openacai.ong/.well-known/openacai-games-catalog.json","apiUrl":"https://openacai.ong/api/v1/mobile/games-catalog","format":"json","status":"package-validated","required":true,"offlineSafe":true,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"GAMHON game catalog, safety boundaries, local progress limits, and future social gates.","replaceWhen":"Replace when the mobile package sha256 changes; local progress remains optional and device-local.","localStorage":"May be cached with package hash validation and last-known-good fallback.","privacy":"No player profiles, social graph, health details, or message history."},{"id":"evidence-library","group":"evidence","packageDocumentId":"evidence-library","stableUrl":"https://openacai.ong/.well-known/openacai-evidence-library.json","apiUrl":"https://openacai.ong/api/v1/mobile/evidence-library","format":"json","status":"package-validated","required":true,"offlineSafe":true,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"Research and program evidence links for partners, professionals, and public review.","replaceWhen":"Replace when the mobile package sha256 changes.","localStorage":"May be cached with package hash validation and last-known-good fallback.","privacy":"Public citation metadata only."},{"id":"service-area","group":"service-area","packageDocumentId":"service-area","stableUrl":"https://openacai.ong/.well-known/openacai-service-area.json","apiUrl":"https://openacai.ong/api/v1/mobile/service-area","format":"json","status":"package-validated","required":true,"offlineSafe":true,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"County coverage, statewide-resource handling, and location privacy hints.","replaceWhen":"Replace when the mobile package sha256 changes.","localStorage":"May be cached with package hash validation and last-known-good fallback.","privacy":"Use county choice or on-device matching; do not send precise location to public endpoints."},{"id":"intake-schema","group":"contact","packageDocumentId":"intake-schema","stableUrl":"https://openacai.ong/.well-known/openacai-intake-schema.json","apiUrl":"https://openacai.ong/api/v1/mobile/intake-schema","format":"json","status":"package-validated","required":true,"offlineSafe":false,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"Public-safe local validation schema for contact drafts before web contact handoff.","replaceWhen":"Replace when the mobile package sha256 changes; drafts remain no-store/network-only at submission time.","localStorage":"Fetch for validation hints only; do not cache user submissions or drafts.","privacy":"Schema only. Never sync names, phones, emails, message text, or draft values through public sync."},{"id":"data-safety","group":"privacy","packageDocumentId":"data-safety","stableUrl":"https://openacai.ong/.well-known/openacai-data-safety.json","apiUrl":"https://openacai.ong/api/v1/mobile/data-safety","format":"json","status":"package-validated","required":true,"offlineSafe":true,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"Public data-safety boundaries for analytics, local storage, app-store privacy labels, and future native features.","replaceWhen":"Replace before enabling any native feature flags.","localStorage":"May be cached with package hash validation and last-known-good fallback.","privacy":"Policy metadata only."},{"id":"client-update-policy","group":"bootstrap","packageDocumentId":"client-update-policy","stableUrl":"https://openacai.ong/.well-known/openacai-client-update-policy.json","apiUrl":"https://openacai.ong/api/v1/mobile/client-update-policy","format":"json","status":"package-validated","required":true,"offlineSafe":true,"safeForDeviceCache":true,"validateWith":"mobile-package","purpose":"Client update, rollback, stale-policy, kill-switch, and web fallback rules.","replaceWhen":"Fetch early and keep last known good policy.","localStorage":"May be cached with package hash validation and last-known-good fallback.","privacy":"Policy metadata only."}],"resourceExports":[{"id":"resources-json","url":"https://openacai.com/resources.json","format":"json","contentType":"application/json","schemaVersion":"1.2","compatibility":"primary","authentication":"none","cache":"public; respect Cache-Control and ETag/Last-Modified when present","purpose":"Full resource directory for app startup, offline search, print/share, and saved lists."},{"id":"resources-csv","url":"https://openacai.com/resources.csv","format":"csv","contentType":"text/csv","schemaVersion":"1.2","compatibility":"export","authentication":"none","cache":"public; respect Cache-Control and ETag/Last-Modified when present","purpose":"Spreadsheet-friendly export for partners, staff review, and lightweight integrations."},{"id":"legacy-api-resources","url":"https://openacai.com/api/resources","format":"json","contentType":"application/json","schemaVersion":"1.2","compatibility":"legacy-compatible","authentication":"none","cache":"public; respect Cache-Control and ETag/Last-Modified when present","purpose":"Backward-compatible JSON endpoint kept for existing integrations."}],"progressiveWebApp":{"manifestUrl":"https://openacai.com/manifest.webmanifest","serviceWorkerUrl":"https://openacai.com/openacai-sw.js","offlineFallbackUrl":"https://openacai.com/offline/","cacheablePublicData":["resources.json","resources.csv","resource manifests","help guides","service area","resource search index"],"neverCache":["contact form","wp-admin","wp-login.php","wp-json","private HelpOps APIs","intake submissions"]},"appLinks":{"url":"https://openacai.ong/.well-known/openacai-app-links.json","apiUrl":"https://openacai.ong/api/v1/mobile/app-links","schemaVersion":"1.0","purpose":"Native Android/iOS standards endpoint inventory, future deep-link routes, and web fallback rules.","clientBehavior":"Treat links as web-first until the standards files include verified Android package and iOS app identifiers."},"nativeRelease":{"url":"https://openacai.ong/.well-known/openacai-native-release.json","apiUrl":"https://openacai.ong/api/v1/mobile/native-release","schemaVersion":"1.0","purpose":"Native Android/iOS release readiness, app-store prerequisites, safety boundaries, and web fallback policy.","clientBehavior":"Read this before enabling app-store prompts, native-only features, direct intake, push notifications, or universal links."},"appStoreReadiness":{"url":"https://openacai.ong/.well-known/openacai-app-store-readiness.json","apiUrl":"https://openacai.ong/api/v1/mobile/app-store-readiness","schemaVersion":"1.0","purpose":"App-store submission checklist for Android/iOS identifiers, support and privacy URLs, required policies, and native feature gates.","clientBehavior":"Read this before showing app-store prompts or native-only account, intake, upload, push, payment, partner, or staff portal UI."},"clientCompatibility":{"url":"https://openacai.ong/.well-known/openacai-client-compatibility.json","apiUrl":"https://openacai.ong/api/v1/mobile/client-compatibility","schemaVersion":"1.0","purpose":"Client/API compatibility matrix, deprecation rules, startup document policy, and safe fallback behavior.","clientBehavior":"Read this before applying feature flags or accepting a new major API/contract version."},"clientUpdatePolicy":{"url":"https://openacai.ong/.well-known/openacai-client-update-policy.json","apiUrl":"https://openacai.ong/api/v1/mobile/client-update-policy","schemaVersion":"1.0","purpose":"Public client update, rollback, kill-switch, stale-policy, and web fallback policy for PWA, Android, and iOS clients.","clientBehavior":"Read this before showing update prompts, using store links, disabling native-only features, or replacing last-known-good package/config data."},"antiAbuse":{"url":"https://openacai.ong/.well-known/openacai-anti-abuse.json","apiUrl":"https://openacai.ong/api/v1/mobile/anti-abuse","schemaVersion":"1.0","purpose":"Public anti-abuse posture for contact forms, Turnstile, rate limits, mobile fallbacks, and privacy boundaries.","clientBehavior":"Read this before opening contact flows; use the web contact fallback and never embed server-side challenge secrets in clients."},"securityPolicy":{"url":"https://openacai.ong/.well-known/openacai-security-policy.json","apiUrl":"https://openacai.ong/api/v1/mobile/security-policy","schemaVersion":"1.0","purpose":"Public browser/API security header, cache, CORS, and client privacy boundary policy.","clientBehavior":"Read this before trusting cached public contracts; keep HTTPS-only behavior and never cache private portal responses."},"dataSafety":{"url":"https://openacai.ong/.well-known/openacai-data-safety.json","apiUrl":"https://openacai.ong/api/v1/mobile/data-safety","schemaVersion":"1.0","purpose":"Public data collection, retention, analytics, local storage, and app-store privacy label policy.","clientBehavior":"Read this before enabling analytics, local drafts, signed-in sync, uploads, or any native intake feature."},"accountData":{"url":"https://openacai.ong/.well-known/openacai-account-data.json","apiUrl":"https://openacai.ong/api/v1/mobile/account-data","schemaVersion":"1.0","purpose":"Public account, deletion, export, signed-in sync, upload, and case-status readiness policy.","clientBehavior":"Read this before showing account, deletion/export, signed-in sync, upload, or authenticated case-status UI."},"socialReadiness":{"url":"https://openacai.ong/.well-known/openacai-social-readiness.json","apiUrl":"https://openacai.ong/api/v1/mobile/social-readiness","schemaVersion":"1.0","purpose":"Public profile preference, social sign-in, moderation, room, and GAMHON social-readiness boundary policy.","clientBehavior":"Read this before showing public profile, friend/contact, direct message, online room, or native social sign-in UI."},"communitySafety":{"url":"https://openacai.ong/.well-known/openacai-community-safety.json","apiUrl":"https://openacai.ong/api/v1/mobile/community-safety","schemaVersion":"1.0","purpose":"Public moderation, reporting, blocking, youth-safety, multiplayer, and public-social launch-gate boundary policy.","clientBehavior":"Read this before showing public profiles, contact graphs, messages, online rooms, open matchmaking, or native multiplayer/social UI."},"notificationPolicy":{"url":"https://openacai.ong/.well-known/openacai-notification-policy.json","apiUrl":"https://openacai.ong/api/v1/mobile/notification-policy","schemaVersion":"1.0","purpose":"Public email, push, SMS, consent, quiet-hours, and notification privacy policy.","clientBehavior":"Read this before showing push prompts, registering device tokens, or enabling notification settings."},"accessibility":{"url":"https://openacai.ong/.well-known/openacai-accessibility.json","apiUrl":"https://openacai.ong/api/v1/mobile/accessibility","schemaVersion":"1.0","purpose":"Public WCAG, screen reader, keyboard, reduced motion, text scaling, and form accessibility policy.","clientBehavior":"Read this before rendering native UI, custom gestures, dense lists, forms, or emergency and safety screens."},"cachePolicy":{"url":"https://openacai.ong/.well-known/openacai-cache-policy.json","apiUrl":"https://openacai.ong/api/v1/mobile/cache-policy","schemaVersion":"1.0","purpose":"Public Cloudflare, browser, PWA, native app cache, offline, no-store, and freshness policy.","clientBehavior":"Read this before storing public documents offline, replacing last-known-good data, or caching any route that could contain private contact or case data."},"measurementPolicy":{"url":"https://openacai.ong/.well-known/openacai-measurement-policy.json","apiUrl":"https://openacai.ong/api/v1/mobile/measurement-policy","schemaVersion":"1.0","purpose":"Public privacy-safe analytics, conversion, Google Ad Grants, and mobile measurement policy.","clientBehavior":"Read this before emitting analytics or conversion events; never attach names, contact details, message text, search text, case data, file names, or precise location."},"clientDiagnostics":{"url":"https://openacai.ong/.well-known/openacai-client-diagnostics.json","apiUrl":"https://openacai.ong/api/v1/mobile/client-diagnostics","schemaVersion":"1.0","purpose":"Public privacy-safe local diagnostics policy for web, Android, and iOS clients.","clientBehavior":"Read before showing diagnostics UI. Keep diagnostics local, redact before display/export, and never upload troubleshooting data unless a future policy explicitly enables it."},"performanceBudget":{"url":"https://openacai.ong/.well-known/openacai-performance-budget.json","apiUrl":"https://openacai.ong/api/v1/mobile/performance-budget","schemaVersion":"1.0","purpose":"Public startup, cache, API latency, asset, and Core Web Vitals budget policy for web, PWA, Android, and iOS clients.","clientBehavior":"Read before first release and before bulk fetching optional documents; fetch critical path first, defer optional contracts, keep last-known-good public data, and never cache private responses."},"adGrantsReadiness":{"url":"https://openacai.ong/.well-known/openacai-ad-grants-readiness.json","apiUrl":"https://openacai.ong/api/v1/mobile/ad-grants-readiness","schemaVersion":"1.0","purpose":"Public Ad Grants landing-page, conversion, keyword, sitelink, and account-maintenance readiness map.","clientBehavior":"Use this for public campaign/landing-page diagnostics only; never treat it as proof of Google Ads account approval or send conversion IDs, search text, names, phone numbers, emails, or messages."},"routeManifest":{"url":"https://openacai.ong/.well-known/openacai-route-manifest.json","apiUrl":"https://openacai.ong/api/v1/mobile/routes","schemaVersion":"1.0","purpose":"Public route, navigation, native screen, web fallback, offline-safety, and no-store boundary manifest.","clientBehavior":"Use this for native tabs, deep links, web fallbacks, offline-safe screens, and public/private route separation."},"serviceStatus":{"url":"https://openacai.ong/.well-known/openacai-service-status.json","apiUrl":"https://openacai.ong/api/v1/mobile/service-status","schemaVersion":"1.0","purpose":"Public service status, component health, client guidance, and safe fallback behavior.","clientBehavior":"Read during startup and before native-only workflows; show a plain status warning, use last-known-good public data when degraded, and keep contact as a network web fallback."},"continuity":{"url":"https://openacai.ong/.well-known/openacai-continuity.json","apiUrl":"https://openacai.ong/api/v1/mobile/continuity","schemaVersion":"1.0","purpose":"Public continuity, backup-readiness, last-known-good, recovery, and outage behavior for web, Android, iOS, and integrations.","clientBehavior":"Read before offline restore, local cache replacement, outage banners, or private workflow prompts; keep public help usable and private data out of caches."},"clientReadiness":{"url":"https://openacai.ong/.well-known/openacai-client-readiness.json","apiUrl":"https://openacai.ong/api/v1/mobile/client-readiness","schemaVersion":"1.0","purpose":"Public launch gates, feature flags, privacy rules, and document requirements for future Android/iOS clients.","clientBehavior":"Read this after bootstrap and package validation before enabling native-only features."},"appConfig":{"url":"https://openacai.ong/.well-known/openacai-app-config.json","apiUrl":"https://openacai.ong/api/v1/mobile/app-config","schemaVersion":"1.0","purpose":"Public remote configuration for startup order, feature flags, endpoint URLs, privacy defaults, and safety behavior.","clientBehavior":"Fetch after validating the package manifest; use it to enable only explicitly allowed features and keep the last known good config if unavailable."},"appConfigSchema":{"url":"https://openacai.ong/.well-known/openacai-app-config-schema.json","apiUrl":"https://openacai.ong/api/v1/schemas/app-config-1.0","schemaVersion":"1.0","purpose":"JSON Schema for validating remote app configuration before applying feature flags or endpoints.","clientBehavior":"Validate app config against this schema, then validate package hashes before replacing cached client configuration."},"mobileContractVerification":{"url":"https://openacai.ong/.well-known/openacai-mobile-contract-verification.json","apiUrl":"https://openacai.ong/api/v1/mobile/contract-verification","schemaVersion":"1.0","purpose":"Public verifier snapshot for package hashes, app-config/schema consistency, privacy boundaries, and PWA contract cache coverage.","clientBehavior":"Use for diagnostics and startup warnings only; do not block emergency or public contact web fallbacks solely because the verifier is stale."},"edgeCapabilities":{"url":"https://openacai.ong/.well-known/openacai-edge-capabilities.json","apiUrl":"https://openacai.ong/api/v1/edge/capabilities","schemaVersion":"1.0","purpose":"Sanitized Cloudflare, cache, Access, R2, tunnel, and mobile edge posture.","clientBehavior":"Use this for diagnostics and environment display only; do not infer private feature access from public edge metadata."},"mobilePackage":{"url":"https://openacai.ong/.well-known/openacai-mobile-package.json","apiUrl":"https://openacai.ong/api/v1/mobile/package","schemaVersion":"1.0","purpose":"Single manifest of app-facing public documents with sha256 hashes, byte sizes, cache metadata, and required-document status.","clientBehavior":"Fetch this first after bootstrap, compare document hashes, download only changed documents, and keep the last known good local package if a required document is unavailable."},"resourceManifest":{"url":"https://openacai.ong/.well-known/openacai-resource-manifest.json","apiUrl":"https://openacai.ong/api/v1/mobile/resource-manifest","schemaVersion":"1.0","purpose":"Checksum, byte length, cache header, and timestamp metadata for public resource exports.","clientBehavior":"Use the manifest to decide whether to download, validate the sha256 hash before replacing local data, and keep the last known good resource snapshot for offline use."},"resourceIndex":{"url":"https://openacai.ong/.well-known/openacai-resource-index.json","apiUrl":"https://openacai.ong/api/v1/mobile/resource-index","schemaVersion":"1.0","purpose":"Per-listing hashes, categories, primary needs, counties, audiences, and verification metadata for lightweight sync checks.","clientBehavior":"Compare resourceSha256 by id to detect changed listings, then download the full resource export only when needed."},"resourceQuality":{"url":"https://openacai.ong/.well-known/openacai-resource-quality.json","apiUrl":"https://openacai.ong/api/v1/mobile/resource-quality","schemaVersion":"1.0","purpose":"Public resource freshness, verification, local coverage, and correction-readiness summary.","clientBehavior":"Use this to show data age, review badges, correction links, and gentle refresh warnings without blocking offline resource lookup."},"resourceFeedbackPolicy":{"url":"https://openacai.ong/.well-known/openacai-resource-feedback-policy.json","apiUrl":"https://openacai.ong/api/v1/mobile/resource-feedback-policy","schemaVersion":"1.0","purpose":"Public resource correction, partner suggestion, review, and privacy policy.","clientBehavior":"Read this before showing correction links or partner suggestion UI; public users use the web contact flow, partners use the private Access-protected portal, and clients never cache correction message text."},"resourceDelta":{"url":"https://openacai.ong/.well-known/openacai-resource-delta.json","apiUrl":"https://openacai.ong/api/v1/mobile/resource-delta","schemaVersion":"1.0","purpose":"Added, changed, removed, and unchanged resource counts with IDs and hashes for lightweight resource sync.","clientBehavior":"Apply only when fromToken matches the locally cached resources.json sha256; otherwise fetch and validate the full resource export."},"resourceSearch":{"url":"https://openacai.ong/.well-known/openacai-resource-search.json","apiUrl":"https://openacai.ong/api/v1/mobile/resource-search","schemaVersion":"1.0","purpose":"Compact normalized terms and term-to-resource mappings for offline search suggestions and client-side filtering.","clientBehavior":"Use matching resource IDs from this index, then render current details from the full resource export."},"resourceTaxonomy":{"url":"https://openacai.ong/.well-known/openacai-resource-taxonomy.json","apiUrl":"https://openacai.ong/api/v1/mobile/resource-taxonomy","schemaVersion":"1.0","purpose":"Category labels, ordering, counts, emergency flags, help page URLs, and icon/color hints for mobile resource navigation.","clientBehavior":"Use taxonomy categories for tabs, filters, empty states, and help sections instead of hardcoding category labels in clients."},"serviceArea":{"url":"https://openacai.ong/.well-known/openacai-service-area.json","apiUrl":"https://openacai.ong/api/v1/mobile/service-area","schemaVersion":"1.0","purpose":"Local county service-area metadata, statewide resource handling, and location privacy hints for mobile clients.","clientBehavior":"Ask the user to choose a county or use optional on-device location matching; do not send precise location to public resource endpoints."},"helpGuides":{"url":"https://openacai.ong/.well-known/openacai-help-guides.json","apiUrl":"https://openacai.ong/api/v1/mobile/help-guides","schemaVersion":"1.0","purpose":"Need-based help guide metadata, preparation checklists, matching resource IDs, and emergency guide hints.","clientBehavior":"Use guides for app home sections, topic routes, and pre-contact preparation prompts."},"intakePolicy":{"url":"https://openacai.ong/.well-known/openacai-intake-policy.json","apiUrl":"https://openacai.ong/api/v1/mobile/intake-policy","schemaVersion":"1.0","purpose":"Safe public contact flow, intake field limits, topic metadata, and privacy rules for mobile clients.","clientBehavior":"Open the public contact page for submissions until direct public mobile intake is explicitly enabled."},"intakeSchema":{"url":"https://openacai.ong/.well-known/openacai-intake-schema.json","apiUrl":"https://openacai.ong/api/v1/mobile/intake-schema","schemaVersion":"1.0","purpose":"Public-safe contact-draft schema for local mobile validation before web contact handoff.","clientBehavior":"Validate and store drafts only on the device, never send draft fields to analytics, and open the no-store web contact page for submission."},"schemas":{"resourceExport":"https://openacai.ong/.well-known/openacai-resource-schema.json","intakeDraft":"https://openacai.ong/.well-known/openacai-intake-schema.json","resourceExportVersion":"1.2"},"clientStorage":{"resources":"Cache the latest complete JSON export and replace atomically after validation.","savedList":"Device-local IDs grouped by need; no account required.","searchIndex":"Use the public resource search index for fast startup, then rebuild locally from the full export when source hashes change.","purgeRule":"Remove local data when the user clears app data or uses an in-app clear saved resources control."},"validation":{"requiredTopLevel":["schemaVersion","generatedAt","reviewedAt","resources"],"requiredResourceFields":["id","category","title","copy","url","counties","lastVerifiedAt","verificationStatus","primaryNeed"],"rejectIf":["missing id","duplicate id","empty category/title/copy/url","invalid url","resources array missing or empty"]},"futurePrivateSync":{"enabled":false,"expectedHost":"openacai.org","auth":"Cloudflare Access plus app role authorization","note":"Private case sync should not be enabled until database, encrypted file storage, retention, and consent flows are fully verified."}}