{"components":{"schemas":{"MobilePushInboxFullEvent":{"additionalProperties":false,"properties":{"acked":{"type":"boolean"},"acked_at":{"format":"date-time","type":["string","null"]},"body":{"maxLength":500,"type":"string"},"category":{"maxLength":40,"minLength":1,"type":"string"},"created_at":{"format":"date-time","type":["string","null"]},"deep_link_path":{"maxLength":512,"minLength":1,"pattern":"^/","type":["string","null"]},"event_id":{"minimum":1,"type":"integer"},"event_key":{"maxLength":120,"minLength":1,"type":"string"},"payload":{"additionalProperties":true,"type":"object"},"read":{"type":"boolean"},"read_at":{"format":"date-time","type":["string","null"]},"severity":{"enum":["info","warning","critical"],"type":"string"},"title":{"maxLength":160,"minLength":1,"type":"string"}},"required":["event_id","event_key","title","body","category","severity","deep_link_path","payload","read","acked","read_at","acked_at","created_at"],"type":"object"},"MobilePushInboxListMeta":{"additionalProperties":false,"properties":{"cursor":{"minimum":1,"type":["integer","null"]},"generated_at":{"format":"date-time","type":"string"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_cursor":{"minimum":1,"type":["integer","null"]},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","limit","cursor","next_cursor","generated_at"],"type":"object"},"MobilePushInboxListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"oneOf":[{"$ref":"#/components/schemas/MobilePushInboxNativeEvent"},{"$ref":"#/components/schemas/MobilePushInboxFullEvent"}]},"maxItems":100,"type":"array"},"meta":{"$ref":"#/components/schemas/MobilePushInboxListMeta"},"ok":{"enum":[true],"type":"boolean"},"summary":{"$ref":"#/components/schemas/MobilePushInboxSummary"}},"required":["ok","data","summary","meta"],"type":"object"},"MobilePushInboxMutationMeta":{"additionalProperties":false,"properties":{"generated_at":{"format":"date-time","type":"string"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","generated_at"],"type":"object"},"MobilePushInboxMutationResponse":{"additionalProperties":false,"properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/MobilePushInboxNativeEvent"},{"$ref":"#/components/schemas/MobilePushInboxFullEvent"}]},"meta":{"$ref":"#/components/schemas/MobilePushInboxMutationMeta"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"MobilePushInboxNativeEvent":{"additionalProperties":false,"properties":{"acked":{"type":"boolean"},"body":{"maxLength":500,"type":"string"},"category":{"maxLength":40,"minLength":1,"type":"string"},"deep_link_path":{"maxLength":512,"minLength":1,"pattern":"^/","type":["string","null"]},"event_id":{"minimum":1,"type":"integer"},"read":{"type":"boolean"},"severity":{"enum":["info","warning","critical"],"type":"string"},"title":{"maxLength":160,"minLength":1,"type":"string"}},"required":["event_id","title","body","category","severity","deep_link_path","read","acked"],"type":"object"},"MobilePushInboxSummary":{"additionalProperties":false,"properties":{"row_count":{"maximum":100,"minimum":0,"type":"integer"},"unacked_count":{"minimum":0,"type":"integer"},"unread_count":{"minimum":0,"type":"integer"}},"required":["unread_count","unacked_count","row_count"],"type":"object"},"MobileResponseMeta":{"additionalProperties":true,"properties":{"created":{"type":"boolean"},"generated_at":{"format":"date-time","type":"string"},"idempotent":{"type":"boolean"},"retry":{"$ref":"#/components/schemas/RetryGuidance"},"updated":{"type":"boolean"}},"required":["generated_at"],"type":"object"},"NativeAccountHubBootstrapResponse":{"additionalProperties":false,"example":{"data":{"inventory":{"data":[{"available_to_loan":true,"id":17,"is_active":true,"name":"Cordless drill"}],"error_code":null,"meta":{"complete":true,"per_section":200,"total":1},"state":"ready"},"loans":{"data":[{"borrower_return_readiness":null,"custody":{"automatic_effects":false,"custody_role":"borrower","handoff_state":"confirmed","viewer_confirmation_state":"confirmed","viewer_role":"lender"},"due_at":"2026-08-08T12:00:00+00:00","evidence_request_attention":null,"id":42,"is_overdue":false,"item":{"id":17,"name":"Cordless drill"},"lent_at":"2026-08-01T12:00:00+00:00","owner_return_attention":null,"parent_loan_id":null,"status":"active"}],"error_code":null,"meta":{"complete":true,"per_section":200,"total":1},"state":"ready"}},"meta":{"contract_version":"native-account-hub-v1","observed_at":"2026-08-03T12:00:00+00:00"},"ok":true},"properties":{"data":{"additionalProperties":false,"properties":{"inventory":{"$ref":"#/components/schemas/NativeAccountHubInventorySection"},"loans":{"$ref":"#/components/schemas/NativeAccountHubLoansSection"}},"required":["loans","inventory"],"type":"object"},"meta":{"additionalProperties":false,"properties":{"contract_version":{"enum":["native-account-hub-v1"],"type":"string"},"observed_at":{"format":"date-time","type":"string"}},"required":["observed_at","contract_version"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeAccountHubInventorySection":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/NativeInventoryItemSummary"},"type":"array"},"error_code":{"enum":["insufficient_scope",null],"type":["string","null"]},"meta":{"$ref":"#/components/schemas/NativeAccountHubSectionMeta"},"state":{"enum":["ready","unavailable"],"type":"string"}},"required":["state","error_code","data","meta"],"type":"object"},"NativeAccountHubLoansSection":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/NativeOpenLoanSummary"},"type":"array"},"error_code":{"enum":["insufficient_scope",null],"type":["string","null"]},"meta":{"$ref":"#/components/schemas/NativeAccountHubSectionMeta"},"state":{"enum":["ready","unavailable"],"type":"string"}},"required":["state","error_code","data","meta"],"type":"object"},"NativeAccountHubSectionMeta":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"per_section":{"maximum":200,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":["integer","null"]}},"required":["per_section","total","complete"],"type":"object"},"NativeAuthErrorResponse":{"additionalProperties":false,"properties":{"error":{"minLength":1,"type":"string"},"error_code":{"enum":["native_auth_exchange_invalid","native_auth_exchange_rejected","native_auth_revoke_invalid","missing_token","invalid_token"],"type":"string"},"ok":{"enum":[false],"type":"boolean"}},"required":["ok","error_code","error"],"type":"object"},"NativeAuthExchangeResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"credential":{"additionalProperties":false,"properties":{"bearer_token":{"type":"string","writeOnly":true},"generation":{"minimum":0,"type":"integer"}},"required":["bearer_token","generation"],"type":"object"},"local_account_identifier":{"pattern":"^native_[A-Za-z0-9_-]{32}$","type":"string"}},"required":["credential","local_account_identifier"],"type":"object"},"meta":{"additionalProperties":false,"properties":{"client":{"enum":["ios"],"type":"string"},"expires_at":{"format":"date-time","type":["string","null"]},"purpose":{"enum":["ios_native_sign_in"],"type":"string"}},"required":["purpose","client","expires_at"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeAuthRevokeResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"disposition":{"enum":["revoked","already_inactive"],"type":"string"},"state":{"enum":["inactive"],"type":"string"}},"required":["state","disposition"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data"],"type":"object"},"NativeBorrowerReturnReadiness":{"additionalProperties":false,"properties":{"accessories":{"additionalProperties":false,"properties":{"item_count":{"maximum":40,"minimum":0,"type":"integer"},"recorded_state":{"enum":["not_required","not_checked","complete","missing"],"type":"string"},"required":{"type":"boolean"}},"required":["required","item_count","recorded_state"],"type":"object"},"actor_role":{"enum":["borrower"],"type":"string"},"automatic_effects":{"enum":[false],"type":"boolean"},"available_action":{"enum":["review_return",null],"type":["string","null"]},"condition_evidence":{"additionalProperties":false,"properties":{"checklist_recorded":{"type":"boolean"},"evidence_count":{"maximum":4,"minimum":0,"type":"integer"},"state":{"enum":["not_requested","pending","accepted","declined","cancelled","expired","fulfilled","reviewed"],"type":"string"}},"required":["state","evidence_count","checklist_recorded"],"type":"object"},"due_state":{"enum":["unscheduled","scheduled","due_soon","due_today","overdue"],"type":"string"},"requirements":{"additionalProperties":false,"properties":{"agreement_acknowledgement":{"type":"boolean"},"condition":{"type":"boolean"},"location":{"type":"boolean"},"photo":{"type":"boolean"},"photo_metadata":{"type":"boolean"}},"required":["location","condition","photo","photo_metadata","agreement_acknowledgement"],"type":"object"},"state":{"enum":["review_before_return","return_requested"],"type":"string"}},"required":["actor_role","state","due_state","requirements","accessories","condition_evidence","available_action","automatic_effects"],"type":"object"},"NativeConnectionInviteRequest":{"additionalProperties":false,"properties":{"email":{"format":"email","maxLength":255,"type":"string"},"message":{"default":"","maxLength":500,"type":"string"},"name":{"default":"","maxLength":120,"type":"string"}},"required":["email"],"type":"object"},"NativeConnectionInviteResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"connection":{"$ref":"#/components/schemas/NativeConnectionSummary"}},"required":["connection"],"type":"object"},"meta":{"additionalProperties":false,"properties":{"acceptance_contract_version":{"enum":["native-connection-invite-no-delivery-v1",null],"type":["string","null"]},"delivery_attempted":{"type":"boolean"},"delivery_sent":{"type":"boolean"},"delivery_state":{"enum":["state_committed","completed","suppressed"],"type":"string"},"delivery_suppressed_for_acceptance":{"type":"boolean"},"idempotency_key":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$","type":"string"},"idempotency_replayed":{"type":"boolean"},"receipt_contract_version":{"enum":["2026-08-15-native-connection-invite-v1"],"type":"string"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","idempotency_key","idempotency_replayed","receipt_contract_version","delivery_state","delivery_attempted","delivery_sent","delivery_suppressed_for_acceptance","acceptance_contract_version"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeConnectionSummary":{"additionalProperties":false,"properties":{"display_name":{"maxLength":120,"minLength":1,"type":"string"},"id":{"minimum":1,"type":"integer"},"state":{"enum":["accepted","pending"],"type":"string"},"user_id":{"minimum":1,"type":["integer","null"]}},"required":["id","state","display_name","user_id"],"type":"object"},"NativeConnectionsResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/NativeConnectionSummary"},"maxItems":100,"type":"array"},"meta":{"additionalProperties":false,"properties":{"delivery_side_effects":{"enum":[false],"type":"boolean"},"privacy_boundary":{"type":"string"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","privacy_boundary","delivery_side_effects"],"type":"object"},"ok":{"enum":[true],"type":"boolean"},"summary":{"additionalProperties":false,"properties":{"accepted_count":{"minimum":0,"type":"integer"},"pending_count":{"minimum":0,"type":"integer"},"row_count":{"maximum":100,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["accepted_count","pending_count","row_count","truncated"],"type":"object"}},"required":["ok","data","summary","meta"],"type":"object"},"NativeConversationEvidence":{"additionalProperties":false,"properties":{"kind":{"enum":["status_update"],"type":"string"},"photo_id":{"minimum":1,"type":"integer"},"thumbnail_path":{"pattern":"^/api/v1/native/loans/[1-9][0-9]*/conversation/messages/[1-9][0-9]*/evidence/thumbnail$","type":"string"}},"required":["photo_id","kind","thumbnail_path"],"type":"object"},"NativeConversationMessage":{"additionalProperties":false,"properties":{"advanced_content":{"type":"boolean"},"body":{"maxLength":4000,"type":"string"},"evidence":{"oneOf":[{"$ref":"#/components/schemas/NativeConversationEvidence"},{"type":"null"}]},"id":{"minimum":1,"type":"integer"},"is_mine":{"type":"boolean"},"position":{"maximum":50,"minimum":1,"type":"integer"},"sender_role":{"enum":["owner","lender","borrower","participant"],"type":"string"},"truncated":{"type":"boolean"}},"required":["id","position","sender_role","is_mine","body","truncated","evidence","advanced_content"],"type":"object"},"NativeConversationReadRequest":{"additionalProperties":false,"properties":{"through_message_id":{"minimum":1,"type":"integer"}},"required":["through_message_id"],"type":"object"},"NativeConversationReadResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"changed":{"type":"boolean"},"loan_id":{"minimum":1,"type":"integer"},"unread_count":{"maximum":999,"minimum":0,"type":"integer"}},"required":["loan_id","changed","unread_count"],"type":"object"},"meta":{"additionalProperties":false,"properties":{"delivery_side_effects":{"enum":[false],"type":"boolean"},"idempotency_key":{"type":"string"},"idempotency_replayed":{"type":"boolean"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","idempotency_key","delivery_side_effects"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeConversationResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/NativeConversationState"},"meta":{"additionalProperties":false,"properties":{"delivery_side_effects":{"enum":[false],"type":"boolean"},"mark_read":{"enum":[false],"type":"boolean"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","mark_read","delivery_side_effects"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeConversationSendRequest":{"additionalProperties":false,"properties":{"body":{"maxLength":2000,"minLength":1,"type":"string"},"evidence_photo_id":{"minimum":1,"type":["integer","null"]}},"required":["body"],"type":"object"},"NativeConversationSendResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"conversation":{"$ref":"#/components/schemas/NativeConversationState"},"message":{"$ref":"#/components/schemas/NativeConversationMessage"}},"required":["conversation","message"],"type":"object"},"meta":{"additionalProperties":false,"properties":{"delivery_attempted":{"type":"boolean"},"delivery_sent_count":{"minimum":0,"type":"integer"},"idempotency_key":{"type":"string"},"idempotency_replayed":{"type":"boolean"},"patriotchat_attempted":{"type":"boolean"},"patriotchat_sent":{"type":"boolean"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","idempotency_key","delivery_attempted","delivery_sent_count","patriotchat_attempted","patriotchat_sent"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeConversationState":{"additionalProperties":false,"properties":{"advanced_features_present":{"type":"boolean"},"advanced_web_path":{"pattern":"^/loans/[1-9][0-9]*/messages$","type":"string"},"can_send":{"type":"boolean"},"has_earlier_messages":{"type":"boolean"},"history_cursor":{"maxLength":2048,"minLength":1,"type":["string","null"]},"loan":{"additionalProperties":false,"properties":{"id":{"minimum":1,"type":"integer"},"item":{"additionalProperties":false,"properties":{"id":{"minimum":1,"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"status":{"type":"string"}},"required":["id","item","status"],"type":"object"},"messages":{"items":{"$ref":"#/components/schemas/NativeConversationMessage"},"maxItems":50,"type":"array"},"read_through_message_id":{"minimum":1,"type":["integer","null"]},"unread_count":{"maximum":999,"minimum":0,"type":"integer"},"viewer_role":{"enum":["owner","lender","borrower"],"type":"string"}},"required":["loan","viewer_role","messages","unread_count","read_through_message_id","can_send","advanced_features_present","advanced_web_path","history_cursor","has_earlier_messages"],"type":"object"},"NativeEvidenceContributionRequestAction":{"additionalProperties":false,"properties":{"accessory_state":{"enum":["complete","missing","not_applicable","not_checked",null],"type":["string","null"]},"action":{"enum":["create","replace","renew","cancel","accept","decline","fulfill","acknowledge_review"],"type":"string"},"borrower_observation":{"maxLength":500,"type":["string","null"]},"condition_state":{"enum":["unchanged","minor_change","needs_attention","not_sure",null],"type":["string","null"]},"evidence_photo_id":{"minimum":1,"type":["integer","null"]},"evidence_photo_ids":{"items":{"minimum":1,"type":"integer"},"maxItems":4,"minItems":0,"type":["array","null"],"uniqueItems":true},"evidence_reference":{"maxLength":2048,"minLength":16,"type":["string","null"]},"evidence_references":{"items":{"maxLength":2048,"minLength":16,"type":"string"},"maxItems":4,"minItems":0,"type":["array","null"]},"expected_version":{"maxLength":43,"minLength":43,"pattern":"^[A-Za-z0-9_-]{43}$","type":"string"},"expires_hours":{"enum":[24,48,72,168,null],"type":["integer","null"]},"note":{"default":"","maxLength":500,"type":"string"},"purpose":{"enum":["current_condition","return_readiness","accessory_check",null],"type":["string","null"]}},"required":["action","expected_version","purpose","note","expires_hours","evidence_photo_id","evidence_photo_ids","evidence_reference","evidence_references","condition_state","accessory_state","borrower_observation"],"type":"object"},"NativeEvidenceContributionRequestResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/NativeEvidenceContributionRequestState"},"meta":{"additionalProperties":false,"properties":{"auth_mode":{"enum":["api_token","native_session"],"type":"string"},"changed":{"type":"boolean"},"delivery_side_effects":{"enum":[false],"type":"boolean"},"exact_lookup":{"enum":[true],"type":"boolean"},"external_notification_sent":{"enum":[false],"type":"boolean"},"idempotency_key":{"type":"string"},"idempotency_replayed":{"type":"boolean"},"media_capture_started":{"enum":[false],"type":"boolean"},"offline_cache":{"additionalProperties":false,"properties":{"account_binding":{"pattern":"^native_[A-Za-z0-9_-]{32}$","type":"string"},"max_age_seconds":{"enum":[86400],"type":"integer"},"media_cache_allowed":{"enum":[false],"type":"boolean"},"mutation_queue_allowed":{"enum":[false],"type":"boolean"}},"required":["account_binding","max_age_seconds","media_cache_allowed","mutation_queue_allowed"],"type":"object"},"token_id":{"minimum":1,"type":["integer","null"]}},"required":["token_id","auth_mode","delivery_side_effects","offline_cache"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeEvidenceContributionRequestState":{"additionalProperties":false,"properties":{"accessory_options":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["value","label"],"type":"object"},"maxItems":4,"minItems":4,"type":"array"},"actor_role":{"enum":["requester","borrower"],"type":"string"},"available_actions":{"items":{"enum":["create","replace","renew","cancel","accept","decline","fulfill","acknowledge_review"],"type":"string"},"type":"array","uniqueItems":true},"condition_options":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["value","label"],"type":"object"},"maxItems":4,"minItems":4,"type":"array"},"delivery":{"additionalProperties":false,"properties":{"borrower_consent_required":{"enum":[true],"type":"boolean"},"external_notification_sent":{"enum":[false],"type":"boolean"},"media_capture_automatic":{"enum":[false],"type":"boolean"},"mode":{"enum":["in_app_only"],"type":"string"}},"required":["mode","external_notification_sent","borrower_consent_required","media_capture_automatic"],"type":"object"},"expiry_hour_options":{"items":{"enum":[24,48,72,168],"type":"integer"},"maxItems":4,"minItems":4,"type":"array","uniqueItems":true},"loan":{"additionalProperties":false,"properties":{"id":{"minimum":1,"type":"integer"},"item":{"additionalProperties":false,"properties":{"id":{"minimum":1,"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"status":{"type":"string"}},"required":["id","item","status"],"type":"object"},"note_max_length":{"enum":[500],"type":"integer"},"observation_max_length":{"enum":[500],"type":"integer"},"purpose_options":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["value","label"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"request":{"oneOf":[{"additionalProperties":false,"properties":{"accepted_at":{"format":"date-time","type":["string","null"]},"accessory_label":{"type":["string","null"]},"accessory_state":{"type":["string","null"]},"borrower_observation":{"maxLength":500,"type":"string"},"cancelled_at":{"format":"date-time","type":["string","null"]},"condition_label":{"type":["string","null"]},"condition_state":{"type":["string","null"]},"declined_at":{"format":"date-time","type":["string","null"]},"evidence_attached":{"type":"boolean"},"evidence_count":{"maximum":4,"minimum":0,"type":"integer"},"expires_at":{"format":"date-time","type":"string"},"fulfilled_at":{"format":"date-time","type":["string","null"]},"id":{"minimum":1,"type":"integer"},"note":{"maxLength":500,"type":"string"},"purpose":{"enum":["current_condition","return_readiness","accessory_check"],"type":"string"},"purpose_label":{"type":"string"},"reviewed_at":{"format":"date-time","type":["string","null"]},"status":{"enum":["pending","accepted","declined","cancelled","expired","fulfilled"],"type":"string"}},"required":["id","purpose","purpose_label","note","status","expires_at","accepted_at","declined_at","cancelled_at","fulfilled_at","reviewed_at","condition_state","condition_label","accessory_state","accessory_label","borrower_observation","evidence_attached","evidence_count"],"type":"object"},{"type":"null"}]},"request_version":{"maxLength":43,"minLength":43,"type":"string"},"review_evidence":{"oneOf":[{"$ref":"#/components/schemas/NativeEvidenceContributionReviewEvidence"},{"type":"null"}]},"review_evidence_set":{"items":{"$ref":"#/components/schemas/NativeEvidenceContributionReviewEvidence"},"maxItems":4,"type":"array"}},"required":["loan","actor_role","request","review_evidence","review_evidence_set","available_actions","purpose_options","expiry_hour_options","condition_options","accessory_options","note_max_length","observation_max_length","request_version","delivery"],"type":"object"},"NativeEvidenceContributionReviewEvidence":{"additionalProperties":false,"properties":{"kind":{"enum":["inventory","status_update","return","other"],"type":"string"},"position":{"maximum":3,"minimum":0,"type":"integer"},"recorded_at":{"format":"date-time","type":["string","null"]},"reference":{"maxLength":2048,"minLength":16,"type":"string"},"reviewed":{"type":"boolean"},"reviewed_at":{"format":"date-time","type":["string","null"]}},"required":["reference","position","kind","recorded_at","reviewed","reviewed_at"],"type":"object"},"NativeEvidenceRequestAttention":{"additionalProperties":false,"properties":{"action_required":{"type":"boolean"},"actor_role":{"enum":["requester","borrower"],"type":"string"},"expires_at":{"format":"date-time","type":"string"},"label":{"type":"string"},"purpose_label":{"type":"string"},"status":{"enum":["pending","accepted","fulfilled"],"type":"string"}},"required":["status","purpose_label","actor_role","action_required","label","expires_at"],"type":"object"},"NativeInventoryItemSummary":{"additionalProperties":false,"properties":{"available_to_loan":{"type":"boolean"},"id":{"minimum":1,"type":"integer"},"is_active":{"type":"boolean"},"name":{"type":"string"}},"required":["id","name","is_active","available_to_loan"],"type":"object"},"NativeLoanBorrowerSummary":{"additionalProperties":false,"properties":{"display_name":{"maxLength":120,"minLength":1,"type":"string"},"id":{"minimum":1,"type":"integer"}},"required":["id","display_name"],"type":"object"},"NativeLoanCreateRequest":{"additionalProperties":false,"properties":{"borrower_id":{"minimum":1,"type":"integer"},"due_date":{"format":"date","type":["string","null"]},"item_id":{"minimum":1,"type":"integer"},"note":{"default":"","maxLength":1000,"type":"string"}},"required":["item_id","borrower_id"],"type":"object"},"NativeLoanCreateResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"deep_link_path":{"pattern":"^/app/open\\?loan_id=[1-9][0-9]*$","type":"string"},"loan":{"additionalProperties":false,"properties":{"borrower":{"$ref":"#/components/schemas/NativeLoanBorrowerSummary"},"due_at":{"format":"date-time","type":["string","null"]},"id":{"minimum":1,"type":"integer"},"item":{"additionalProperties":false,"properties":{"id":{"minimum":1,"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"status":{"enum":["active"],"type":"string"}},"required":["id","item","borrower","status","due_at"],"type":"object"}},"required":["loan","deep_link_path"],"type":"object"},"meta":{"additionalProperties":false,"properties":{"delivery_side_effects":{"enum":["loan_event_only"],"type":"string"},"idempotency_key":{"type":"string"},"idempotency_replayed":{"type":"boolean"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","idempotency_key","delivery_side_effects"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeLoanCustodyState":{"additionalProperties":false,"properties":{"automatic_effects":{"enum":[false],"type":"boolean"},"custody_role":{"enum":["borrower",null],"type":["string","null"]},"handoff_state":{"enum":["pending","confirmed"],"type":"string"},"viewer_confirmation_state":{"enum":["pending","confirmed","not_participant"],"type":"string"},"viewer_role":{"enum":["borrower","lender","owner_observer"],"type":"string"}},"required":["viewer_role","handoff_state","viewer_confirmation_state","custody_role","automatic_effects"],"type":"object"},"NativeLoanHandoffChecklistItem":{"additionalProperties":false,"properties":{"borrower_checked":{"type":"boolean"},"key":{"enum":["identity_confirmed","item_condition_reviewed","accessories_confirmed","location_time_confirmed"],"type":"string"},"label":{"enum":["Identity of counterparty verified","Item condition reviewed at handoff","Accessories/parts checked","Handoff location and time confirmed"],"type":"string"},"lender_checked":{"type":"boolean"}},"required":["key","label","lender_checked","borrower_checked"],"type":"object"},"NativeLoanHandoffConfirmRequest":{"additionalProperties":false,"properties":{"checklist_keys":{"items":false,"maxItems":4,"minItems":4,"prefixItems":[{"enum":["identity_confirmed"],"type":"string"},{"enum":["item_condition_reviewed"],"type":"string"},{"enum":["accessories_confirmed"],"type":"string"},{"enum":["location_time_confirmed"],"type":"string"}],"type":"array","uniqueItems":true},"confirm":{"enum":[true],"type":"boolean"},"expected_version":{"maxLength":43,"minLength":43,"pattern":"^[A-Za-z0-9_-]{43}$","type":"string"}},"required":["checklist_keys","confirm","expected_version"],"type":"object"},"NativeLoanHandoffConfirmResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"actor_role":{"enum":["lender","borrower"],"type":"string"},"confirmation":{"additionalProperties":false,"properties":{"borrower_confirmed":{"type":"boolean"},"both_confirmed":{"type":"boolean"},"lender_confirmed":{"type":"boolean"}},"required":["lender_confirmed","borrower_confirmed","both_confirmed"],"type":"object"},"effects":{"additionalProperties":false,"properties":{"completion_event_created":{"type":"boolean"},"external_delivery":{"enum":[false],"type":"boolean"},"loan_event_created":{"enum":[true],"type":"boolean"},"notification_sent":{"enum":[false],"type":"boolean"},"participant_checklist_updated":{"enum":[true],"type":"boolean"}},"required":["participant_checklist_updated","loan_event_created","completion_event_created","notification_sent","external_delivery"],"type":"object"},"loan_id":{"minimum":1,"type":"integer"},"state_version":{"maxLength":43,"minLength":43,"pattern":"^[A-Za-z0-9_-]{43}$","type":"string"}},"required":["loan_id","actor_role","state_version","confirmation","effects"],"type":"object"},"meta":{"additionalProperties":false,"properties":{"contract_version":{"enum":["native-handoff-confirm-v1"],"type":"string"},"delivery_side_effects":{"enum":[false],"type":"boolean"},"external_notification_sent":{"enum":[false],"type":"boolean"},"idempotency_key":{"type":"string"},"idempotency_replayed":{"type":"boolean"}},"required":["contract_version","idempotency_key","idempotency_replayed","delivery_side_effects","external_notification_sent"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeLoanHandoffReadResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"advanced_web_path":{"pattern":"^/loans/[1-9][0-9]*/handoff$","type":"string"},"capabilities":{"additionalProperties":false,"properties":{"native_confirmation_available":{"type":"boolean"},"native_read_only":{"enum":[true],"type":"boolean"},"web_confirmation_available":{"type":"boolean"}},"required":["native_read_only","native_confirmation_available","web_confirmation_available"],"type":"object"},"checklist_items":{"items":{"$ref":"#/components/schemas/NativeLoanHandoffChecklistItem"},"maxItems":4,"minItems":4,"type":"array"},"confirmation":{"additionalProperties":false,"properties":{"borrower_confirmed":{"type":"boolean"},"both_confirmed":{"type":"boolean"},"lender_confirmed":{"type":"boolean"}},"required":["lender_confirmed","borrower_confirmed","both_confirmed"],"type":"object"},"loan":{"additionalProperties":false,"properties":{"id":{"minimum":1,"type":"integer"},"item_name":{"maxLength":255,"minLength":1,"type":"string"},"status":{"type":"string"}},"required":["id","item_name","status"],"type":"object"},"state_version":{"maxLength":43,"minLength":43,"pattern":"^[A-Za-z0-9_-]{43}$","type":"string"},"viewer":{"additionalProperties":false,"properties":{"is_participant":{"type":"boolean"},"role":{"enum":["lender","borrower","owner_observer"],"type":"string"}},"required":["role","is_participant"],"type":"object"}},"required":["loan","viewer","checklist_items","confirmation","state_version","capabilities","advanced_web_path"],"type":"object"},"meta":{"additionalProperties":false,"properties":{"contract_version":{"enum":["native-handoff-read-v1"],"type":"string"},"database_writes":{"enum":[false],"type":"boolean"},"delivery_side_effects":{"enum":[false],"type":"boolean"},"privacy_boundary":{"type":"string"}},"required":["contract_version","privacy_boundary","database_writes","delivery_side_effects"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeLoanReturnRequest":{"additionalProperties":false,"properties":{"action":{"enum":["request_return","confirm_return"],"type":"string"},"condition":{"default":"","maxLength":500,"type":"string"},"custody_confirmed":{"default":false,"type":"boolean"},"location":{"default":"","maxLength":180,"type":"string"},"note":{"default":"","maxLength":1000,"type":"string"},"reviewed":{"enum":[true],"type":"boolean"}},"required":["action","reviewed"],"type":"object"},"NativeLoanReturnResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/NativeLoanReturnState"},"meta":{"additionalProperties":false,"properties":{"acceptance_contract_version":{"enum":["native-return-no-delivery-v1"],"type":"string"},"delivery_attempted":{"type":"boolean"},"delivery_sent_count":{"minimum":0,"type":"integer"},"delivery_side_effects":{"enum":[false],"type":"boolean"},"delivery_state":{"enum":["state_committed","completed","suppressed"],"type":"string"},"delivery_suppressed_for_acceptance":{"enum":[true],"type":"boolean"},"idempotency_key":{"type":"string"},"idempotency_replayed":{"type":"boolean"},"operation_id":{"format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"operation_replayed":{"type":"boolean"},"private_activity_recorded_count":{"minimum":0,"type":"integer"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeLoanReturnState":{"additionalProperties":false,"properties":{"actor_role":{"enum":["borrower","owner"],"type":"string"},"advanced_reasons":{"items":{"enum":["custody_chain","child_dispute","agreement_acknowledgement","photo_evidence","accessory_checklist"],"type":"string"},"type":"array","uniqueItems":true},"advanced_required":{"type":"boolean"},"advanced_web_path":{"pattern":"^/loans/[1-9][0-9]*/return$","type":"string"},"available_action":{"enum":["request_return","confirm_return",null],"type":["string","null"]},"loan":{"additionalProperties":false,"properties":{"id":{"minimum":1,"type":"integer"},"item":{"additionalProperties":false,"properties":{"id":{"minimum":1,"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"type":"object"},"status":{"type":"string"}},"required":["id","item","status"],"type":"object"},"requirements":{"additionalProperties":false,"properties":{"condition":{"type":"boolean"},"location":{"type":"boolean"},"physical_custody_confirmation":{"type":"boolean"}},"required":["location","condition","physical_custody_confirmation"],"type":"object"},"submission":{"additionalProperties":false,"properties":{"condition":{"maxLength":500,"type":["string","null"]},"location":{"maxLength":180,"type":["string","null"]},"note":{"maxLength":1000,"type":["string","null"]}},"required":["location","condition","note"],"type":["object","null"]}},"required":["loan","actor_role","available_action","requirements","submission","advanced_required","advanced_reasons","advanced_web_path"],"type":"object"},"NativeLoanStartResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"advanced_web_path":{"pattern":"^/items/[1-9][0-9]*/loan/new$","type":"string"},"blocked_reason":{"enum":["item_unavailable","item_quarantined","item_already_loaned",null],"type":["string","null"]},"borrower_setup":{"additionalProperties":false,"properties":{"eligible_count":{"minimum":0,"type":"integer"},"invite_delivery_effect":{"enum":["one_reviewed_invite_email"],"type":"string"},"invite_path":{"enum":["/api/v1/native/connections/invites"],"type":"string"},"loan_effect":{"enum":["none_until_separate_reviewed_create"],"type":"string"},"state":{"enum":["ready","invite_required"],"type":"string"}},"required":["state","eligible_count","invite_path","invite_delivery_effect","loan_effect"],"type":"object"},"borrowers":{"items":{"$ref":"#/components/schemas/NativeLoanBorrowerSummary"},"type":"array"},"eligible":{"type":"boolean"},"item":{"additionalProperties":false,"properties":{"id":{"minimum":1,"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"type":"object"}},"required":["item","eligible","blocked_reason","borrowers","borrower_setup","advanced_web_path"],"type":"object"},"meta":{"additionalProperties":false,"properties":{"delivery_side_effects":{"enum":[false],"type":"boolean"},"privacy_boundary":{"type":"string"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","privacy_boundary","delivery_side_effects"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeLoanSummaryResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/NativeOpenLoanSummary"},"meta":{"additionalProperties":false,"properties":{"token_id":{"minimum":1,"type":"integer"}},"required":["token_id"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeMissingReportCreate":{"additionalProperties":false,"properties":{"category_id":{"minimum":0,"type":"integer"},"contract_version":{"enum":["2026-08-13-native-missing-report-create-v1"],"type":"string"},"description":{"maxLength":4000,"minLength":1,"type":"string"},"is_public":{"type":"boolean"},"item_type":{"enum":["item","other","pet","vehicle"],"type":"string"},"last_seen_latitude":{"maximum":90,"minimum":-90,"type":["number","null"]},"last_seen_location":{"maxLength":255,"type":["string","null"]},"last_seen_longitude":{"maximum":180,"minimum":-180,"type":["number","null"]},"last_seen_radius_miles":{"maximum":150,"minimum":0.1,"type":["number","null"]},"review_confirmed":{"enum":[true],"type":"boolean"},"serial_number":{"maxLength":255,"type":["string","null"]},"subcategory_id":{"minimum":0,"type":"integer"},"title":{"maxLength":180,"minLength":1,"type":"string"}},"required":["contract_version","review_confirmed","title","description"],"type":"object"},"NativeMissingReportCreateEffects":{"additionalProperties":false,"properties":{"external_notification_attempted":{"enum":[false],"type":"boolean"},"external_notification_sent":{"enum":[false],"type":"boolean"},"external_provider_contacted":{"enum":[false],"type":"boolean"},"report_created":{"enum":[true],"type":"boolean"}},"required":["report_created","external_notification_attempted","external_notification_sent","external_provider_contacted"],"type":"object"},"NativeMissingReportCreateMeta":{"additionalProperties":false,"properties":{"contract_version":{"enum":["2026-08-13-native-missing-report-create-v1"],"type":"string"},"idempotency_key":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$","type":"string"},"idempotency_replayed":{"type":"boolean"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","idempotency_key","idempotency_replayed","contract_version"],"type":"object"},"NativeMissingReportCreateReceipt":{"additionalProperties":false,"properties":{"advanced_web_path":{"pattern":"^/missing/[1-9][0-9]*$","type":"string"},"deep_link_path":{"pattern":"^/app/open\\?missing_report_id=[1-9][0-9]*$","type":"string"},"is_public":{"type":"boolean"},"item_type":{"enum":["item","other","pet","vehicle"],"type":"string"},"photo_attachment_state":{"enum":["not_attached"],"type":"string"},"report_id":{"minimum":1,"type":"integer"},"status":{"enum":["open"],"type":"string"},"title":{"maxLength":180,"minLength":1,"type":"string"}},"required":["report_id","title","item_type","status","is_public","photo_attachment_state","deep_link_path","advanced_web_path"],"type":"object"},"NativeMissingReportCreateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/NativeMissingReportCreateReceipt"},"effects":{"$ref":"#/components/schemas/NativeMissingReportCreateEffects"},"meta":{"$ref":"#/components/schemas/NativeMissingReportCreateMeta"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","effects","meta"],"type":"object"},"NativeMissingReportListData":{"additionalProperties":false,"properties":{"effects":{"$ref":"#/components/schemas/NativeMissingReportListEffects"},"pagination":{"$ref":"#/components/schemas/NativeMissingReportListPagination"},"reports":{"items":{"$ref":"#/components/schemas/NativeMissingReportListRow"},"maxItems":50,"type":"array"}},"required":["reports","pagination","effects"],"type":"object"},"NativeMissingReportListEffects":{"additionalProperties":false,"properties":{"external_provider_contacted":{"enum":[false],"type":"boolean"},"notifications_sent":{"enum":[false],"type":"boolean"},"reports_changed":{"enum":[false],"type":"boolean"}},"required":["reports_changed","notifications_sent","external_provider_contacted"],"type":"object"},"NativeMissingReportListMeta":{"additionalProperties":false,"properties":{"contract_version":{"enum":["2026-08-13-native-missing-report-list-v1"],"type":"string"},"status_filter":{"enum":["all","open","resolved","cancelled"],"type":"string"},"token_id":{"minimum":1,"type":"integer"}},"required":["token_id","status_filter","contract_version"],"type":"object"},"NativeMissingReportListPagination":{"additionalProperties":false,"properties":{"has_next":{"type":"boolean"},"page":{"minimum":1,"type":"integer"},"pages":{"minimum":0,"type":"integer"},"per_page":{"maximum":50,"minimum":1,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["page","per_page","total","pages","has_next"],"type":"object"},"NativeMissingReportListResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/NativeMissingReportListData"},"meta":{"$ref":"#/components/schemas/NativeMissingReportListMeta"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"NativeMissingReportListRow":{"additionalProperties":false,"properties":{"advanced_web_path":{"pattern":"^/missing/[1-9][0-9]*$","type":"string"},"created_at":{"format":"date-time","type":"string"},"deep_link_path":{"pattern":"^/app/open\\?missing_report_id=[1-9][0-9]*$","type":"string"},"is_public":{"type":"boolean"},"item_type":{"enum":["item","other","pet","vehicle"],"type":"string"},"photo_attachment_state":{"enum":["not_attached","attached_private"],"type":"string"},"report_id":{"minimum":1,"type":"integer"},"resolved_at":{"format":"date-time","type":["string","null"]},"status":{"enum":["open","resolved","cancelled"],"type":"string"},"tip_count":{"minimum":0,"type":"integer"},"title":{"maxLength":180,"minLength":1,"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["report_id","title","item_type","status","is_public","photo_attachment_state","tip_count","created_at","updated_at","resolved_at","deep_link_path","advanced_web_path"],"type":"object"},"NativeOpenLoanItemReference":{"additionalProperties":false,"properties":{"id":{"minimum":1,"type":"integer"},"name":{"type":["string","null"]}},"required":["id","name"],"type":"object"},"NativeOpenLoanSummary":{"additionalProperties":false,"properties":{"borrower_return_readiness":{"oneOf":[{"$ref":"#/components/schemas/NativeBorrowerReturnReadiness"},{"type":"null"}]},"custody":{"$ref":"#/components/schemas/NativeLoanCustodyState"},"due_at":{"format":"date-time","type":["string","null"]},"evidence_request_attention":{"oneOf":[{"$ref":"#/components/schemas/NativeEvidenceRequestAttention"},{"type":"null"}]},"id":{"minimum":1,"type":"integer"},"is_overdue":{"type":"boolean"},"item":{"$ref":"#/components/schemas/NativeOpenLoanItemReference"},"lent_at":{"format":"date-time","type":["string","null"]},"owner_return_attention":{"oneOf":[{"$ref":"#/components/schemas/NativeOwnerReturnAttention"},{"type":"null"}]},"parent_loan_id":{"minimum":1,"type":["integer","null"]},"status":{"type":"string"}},"required":["id","item","status","lent_at","due_at","is_overdue","parent_loan_id","custody","owner_return_attention","evidence_request_attention","borrower_return_readiness"],"type":"object"},"NativeOwnerReturnAttention":{"additionalProperties":false,"properties":{"actor_role":{"enum":["owner"],"type":"string"},"automatic_effects":{"enum":[false],"type":"boolean"},"available_action":{"enum":["review_return"],"type":"string"},"state":{"enum":["confirm_physical_custody"],"type":"string"}},"required":["actor_role","state","available_action","automatic_effects"],"type":"object"},"NativeWebSessionContinuationResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"continuation_path":{"pattern":"^/mobile/native-web-session/continue/rmsws_[A-Za-z0-9_-]{32,96}$","type":"string"},"expires_in_seconds":{"maximum":120,"minimum":30,"type":"integer"}},"required":["continuation_path","expires_in_seconds"],"type":"object"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data"],"type":"object"},"NativeWebSessionErrorResponse":{"additionalProperties":false,"properties":{"error":{"minLength":1,"type":"string"},"error_code":{"enum":["native_web_session_invalid","native_web_session_client_required","native_web_session_rejected","native_web_session_account_mismatch","native_web_session_unavailable"],"type":"string"},"ok":{"enum":[false],"type":"boolean"}},"required":["ok","error_code","error"],"type":"object"},"OfflineConflictComparison":{"additionalProperties":false,"properties":{"auto_merged_fields":{"items":{"enum":["location_hint","notes","photo_ids"],"type":"string"},"maxItems":3,"type":"array","uniqueItems":true},"contract_version":{"enum":["2026-08-09-conflict-comparison-v1"],"type":"string"},"fields":{"items":{"$ref":"#/components/schemas/OfflineConflictComparisonField"},"maxItems":3,"minItems":1,"type":"array","uniqueItems":true}},"required":["contract_version","fields","auto_merged_fields"],"type":"object"},"OfflineConflictComparisonField":{"additionalProperties":false,"properties":{"allowed_choices":{"items":false,"maxItems":2,"minItems":2,"prefixItems":[{"const":"local"},{"const":"server"}],"type":"array"},"field":{"enum":["borrower_id","due_at","status"],"type":"string"},"label":{"enum":["Due date","Loan status","Borrower"],"type":"string"},"local_display":{"maxLength":80,"minLength":1,"type":"string"},"server_display":{"maxLength":80,"minLength":1,"type":"string"}},"required":["field","label","local_display","server_display","allowed_choices"],"type":"object"},"OfflineQueueListMeta":{"additionalProperties":false,"properties":{"auth_mode":{"enum":["api_token","native_session"],"type":"string"},"generated_at":{"format":"date-time","type":"string"},"limit":{"maximum":200,"minimum":1,"type":"integer"},"status":{"enum":["all","cancelled","conflict_detected","failed","in_progress","pending","requires_manual_merge","resolved","upload_staged"],"type":"string"},"token_id":{"minimum":1,"type":["integer","null"]}},"required":["token_id","auth_mode","status","limit","generated_at"],"type":"object"},"OfflineQueueListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/OfflineQueueOperation"},"maxItems":200,"type":"array"},"meta":{"$ref":"#/components/schemas/OfflineQueueListMeta"},"ok":{"enum":[true],"type":"boolean"},"summary":{"$ref":"#/components/schemas/OfflineQueueSummary"}},"required":["ok","data","summary","meta"],"type":"object"},"OfflineQueueOperation":{"additionalProperties":false,"properties":{"attempt_count":{"minimum":0,"type":"integer"},"conflict_comparison":{"description":"Display-safe server-validated comparison. Raw queue payload and resolution dictionaries must never be used as comparison UI input.","oneOf":[{"$ref":"#/components/schemas/OfflineConflictComparison"},{"type":"null"}]},"created_at":{"format":"date-time","type":["string","null"]},"last_error":{"maxLength":255,"type":["string","null"]},"operation_type":{"maxLength":40,"minLength":1,"pattern":"^[a-z0-9_-]+$","type":"string"},"operation_uuid":{"$ref":"#/components/schemas/OperationUUID"},"payload":{"additionalProperties":true,"type":"object"},"priority":{"maximum":9999,"minimum":1,"type":"integer"},"resolution":{"additionalProperties":true,"type":"object"},"status":{"enum":["cancelled","conflict_detected","failed","in_progress","pending","requires_manual_merge","resolved","upload_staged"],"type":"string"},"updated_at":{"format":"date-time","type":["string","null"]}},"required":["operation_uuid","operation_type","status","priority","attempt_count","last_error","payload","resolution","conflict_comparison","created_at","updated_at"],"type":"object"},"OfflineQueueSummary":{"additionalProperties":false,"properties":{"by_status":{"additionalProperties":{"minimum":0,"type":"integer"},"type":"object"},"cancelled_count":{"minimum":0,"type":"integer"},"conflict_count":{"minimum":0,"type":"integer"},"failed_count":{"minimum":0,"type":"integer"},"in_progress_count":{"minimum":0,"type":"integer"},"pending_count":{"minimum":0,"type":"integer"},"resolved_count":{"minimum":0,"type":"integer"},"total":{"minimum":0,"type":"integer"}},"required":["total","pending_count","in_progress_count","failed_count","conflict_count","cancelled_count","resolved_count","by_status"],"type":"object"},"OfflineQueueUpsertRequest":{"additionalProperties":false,"properties":{"operation_type":{"description":"Optional; defaults to sync_update. Supplied values are exact and never normalized.","maxLength":40,"minLength":1,"pattern":"^[a-z0-9_-]+$","type":"string"},"operation_uuid":{"$ref":"#/components/schemas/OperationUUID","description":"Optional. When omitted, the server generates a collision-safe operation UUID with up to eight collision retries inside the authenticated user's namespace."},"payload":{"additionalProperties":true,"description":"Bounded server-side to 65536 UTF-8 JSON bytes and 8 container levels by default.","type":"object","x-rms-default-max-container-depth":8,"x-rms-default-max-json-bytes":65536},"priority":{"description":"Optional; defaults to 100. Exact integer only, with no coercion or clamping.","maximum":9999,"minimum":1,"type":"integer"},"status":{"description":"Only client-creatable states. resolved, cancelled, and conflict states are server-owned transitions.","enum":["failed","in_progress","pending"],"type":"string"}},"type":"object"},"OfflineQueueUpsertResponse":{"properties":{"data":{"$ref":"#/components/schemas/OfflineQueueOperation"},"meta":{"$ref":"#/components/schemas/MobileResponseMeta"},"ok":{"enum":[true],"type":"boolean"}},"required":["ok","data","meta"],"type":"object"},"OperationUUID":{"description":"Stable client-generated identifier scoped to the authenticated user. Different users may independently use the same value. Reuse it for every retry of the same logical operation; create a new value only for a new operation. Values are validated exactly and are never lowercased, stripped, or truncated by the server.","maxLength":48,"minLength":1,"pattern":"^[a-z0-9_-]+$","type":"string"},"Problem":{"properties":{"details":{"additionalProperties":true,"type":"object"},"error":{"type":"string"},"error_code":{"type":"string"},"ok":{"type":"boolean"},"problem":{"properties":{"detail":{"type":"string"},"details":{"additionalProperties":true,"type":"object"},"error_code":{"type":"string"},"instance":{"type":"string"},"recovery_actions":{"items":{"type":"string"},"type":"array"},"request_id":{"type":["string","null"]},"retry":{"$ref":"#/components/schemas/RetryGuidance"},"status":{"type":"integer"},"title":{"type":"string"},"type":{"type":"string"}},"required":["type","title","status","detail"],"type":"object"},"recovery_actions":{"items":{"type":"string"},"type":"array"},"retry":{"$ref":"#/components/schemas/RetryGuidance"}},"required":["ok","error","problem"],"type":"object"},"RetryGuidance":{"additionalProperties":false,"properties":{"backoff_required":{"type":"boolean"},"next_action":{"enum":["sync_when_ready","confirm_attachment","refresh_context","restage_evidence","view_protected_evidence","await_sync","retry_operation","resolve_conflict","replay_operation","none"],"type":"string"},"operation_uuid":{"$ref":"#/components/schemas/OperationUUID"},"retry_after_seconds":{"description":"Present only for bounded transient backoff; also emitted as the Retry-After response header.","maximum":300,"minimum":1,"type":"integer"},"reuse_operation_uuid":{"enum":[true],"type":"boolean"},"safe_to_retry_same_request":{"type":"boolean"}},"required":["operation_uuid","reuse_operation_uuid","safe_to_retry_same_request","backoff_required","next_action"],"type":"object"}},"securitySchemes":{"bearerAuth":{"bearerFormat":"API token","scheme":"bearer","type":"http"}}},"info":{"description":"Versioned OpenAPI publication for ReturnMyShit v1 endpoints.","summary":"Owner, operations, and mobile parity APIs.","title":"ReturnMyShit API","version":"v1"},"openapi":"3.1.0","paths":{"/api/v1/auth/sessions":{"get":{"operationId":"listAuthSessions","responses":{"200":{"description":"Session list"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"}},"summary":"List auth sessions"}},"/api/v1/auth/sessions/risk-signals":{"get":{"operationId":"listAuthSessionRiskSignals","responses":{"200":{"description":"Risk signal payload"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"}},"summary":"Session risk/anomaly signals"}},"/api/v1/auth/sessions/{session_id}/revoke":{"post":{"operationId":"revokeAuthSession","parameters":[{"in":"path","name":"session_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Revocation accepted"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Session not found"}},"summary":"Revoke one auth session"}},"/api/v1/capabilities":{"get":{"operationId":"capabilityDiscovery","responses":{"200":{"description":"Capability payload"}},"summary":"Capability discovery by client profile"}},"/api/v1/capabilities/changefeed":{"get":{"operationId":"capabilityChangefeed","responses":{"200":{"description":"Capability changefeed payload"}},"summary":"Capability contract changefeed since version"}},"/api/v1/capabilities/changefeed/rss":{"get":{"operationId":"capabilityChangefeedRss","responses":{"200":{"description":"Capability changefeed RSS"}},"summary":"Capability contract changefeed RSS feed"}},"/api/v1/capabilities/compatibility":{"get":{"operationId":"capabilityCompatibilityMatrix","responses":{"200":{"description":"Capability compatibility matrix payload"}},"summary":"Capability compatibility matrix by profile/client version"}},"/api/v1/capabilities/endpoint-alias-detector":{"get":{"operationId":"capabilityEndpointAliasDetector","responses":{"200":{"description":"Capabilities endpoint alias detector payload"}},"summary":"Detect deprecated capabilities endpoint aliases"}},"/api/v1/capabilities/endpoint-alias-detector/suppressions":{"delete":{"operationId":"clearCapabilityEndpointAliasDetectorSuppressions","responses":{"200":{"description":"Capabilities endpoint alias suppression clear payload"}},"summary":"Clear endpoint alias detector suppressions"},"get":{"operationId":"capabilityEndpointAliasDetectorSuppressions","responses":{"200":{"description":"Capabilities endpoint alias suppression list payload"}},"summary":"List endpoint alias detector suppressions (active or include_expired)"},"post":{"operationId":"upsertCapabilityEndpointAliasDetectorSuppressions","responses":{"200":{"description":"Capabilities endpoint alias suppression upsert payload"}},"summary":"Create endpoint alias detector suppressions with expiry metadata"}},"/api/v1/capabilities/endpoint-alias-detector/suppressions/ack":{"post":{"operationId":"capabilityEndpointAliasDetectorSuppressionsAck","responses":{"200":{"description":"Capabilities endpoint alias suppression ack payload"}},"summary":"Acknowledge endpoint alias suppression digest rows"}},"/api/v1/capabilities/endpoint-alias-detector/suppressions/digest":{"get":{"operationId":"capabilityEndpointAliasDetectorSuppressionsDigest","responses":{"200":{"description":"Capabilities endpoint alias suppression digest payload"}},"summary":"List endpoint alias suppressions expiring soon with ack state"}},"/api/v1/capabilities/endpoint-alias-detector/suppressions/history":{"get":{"operationId":"capabilityEndpointAliasDetectorSuppressionsHistory","responses":{"200":{"description":"Capabilities endpoint alias suppression history payload"}},"summary":"Export endpoint alias suppression history (csv|md)"}},"/api/v1/capabilities/openapi-parity-audit":{"get":{"operationId":"capabilityOpenapiParityAudit","responses":{"200":{"description":"Capabilities/OpenAPI parity audit payload"}},"summary":"Audit capabilities endpoint map against published OpenAPI paths"}},"/api/v1/capabilities/openapi-parity-audit/baselines":{"get":{"operationId":"capabilityOpenapiParityBaselines","responses":{"200":{"description":"Capabilities/OpenAPI parity baseline list payload"}},"summary":"List capabilities/OpenAPI parity baselines"},"post":{"operationId":"capabilityOpenapiParityBaselinePin","responses":{"200":{"description":"Capabilities/OpenAPI parity baseline pin payload"}},"summary":"Pin capabilities/OpenAPI parity baseline for profile"}},"/api/v1/capabilities/openapi-parity-audit/baselines/drift":{"get":{"operationId":"capabilityOpenapiParityBaselineDrift","responses":{"200":{"description":"Capabilities/OpenAPI parity baseline drift payload"}},"summary":"Compare current parity audit against pinned baseline"}},"/api/v1/capabilities/openapi-parity-audit/history":{"get":{"operationId":"capabilityOpenapiParityAuditHistory","responses":{"200":{"description":"Capabilities/OpenAPI parity trend payload"}},"summary":"Capabilities/OpenAPI parity trend history"}},"/api/v1/capabilities/openapi-parity-audit/history/export":{"get":{"operationId":"capabilityOpenapiParityAuditHistoryExport","responses":{"200":{"description":"Capabilities/OpenAPI parity trend export payload"}},"summary":"Export capabilities/OpenAPI parity trend history (csv|md) with daily severity histogram"}},"/api/v1/capabilities/openapi-parity-audit/severity-policy":{"get":{"operationId":"capabilityOpenapiParitySeverityPolicy","responses":{"200":{"description":"Capabilities/OpenAPI parity severity policy payload"}},"summary":"Read capabilities/OpenAPI parity severity policy"},"post":{"operationId":"updateCapabilityOpenapiParitySeverityPolicy","responses":{"200":{"description":"Capabilities/OpenAPI parity severity policy update payload"}},"summary":"Update capabilities/OpenAPI parity severity policy"}},"/api/v1/capabilities/openapi-parity-audit/severity-policy/simulate":{"get":{"operationId":"capabilityOpenapiParitySeverityPolicySimulate","responses":{"200":{"description":"Capabilities/OpenAPI parity severity policy simulation payload"}},"summary":"Simulate parity severity outcomes for threshold policies over history windows"},"post":{"operationId":"capabilityOpenapiParitySeverityPolicySimulatePost","responses":{"200":{"description":"Capabilities/OpenAPI parity severity policy simulation payload"}},"summary":"Simulate parity severity outcomes for multiple threshold scenarios"}},"/api/v1/contracts/snapshots/ios-bootstrap":{"get":{"operationId":"iosContractSnapshotFixture","responses":{"200":{"description":"Contract snapshot fixture payload"}},"summary":"Generate iOS/API contract snapshot fixture payload for SDK tests"}},"/api/v1/contracts/snapshots/ios-bootstrap/compare":{"get":{"operationId":"iosContractSnapshotCompare","parameters":[{"in":"query","name":"format","schema":{"enum":["json","md"],"type":"string"}}],"responses":{"200":{"description":"Contract snapshot compare payload"}},"summary":"Compare iOS bootstrap contract snapshot fixture against published checksum"}},"/api/v1/contracts/snapshots/ios-bootstrap/publish":{"get":{"operationId":"iosContractSnapshotPublishRegistry","responses":{"200":{"description":"Contract snapshot publish registry payload"}},"summary":"List published iOS contract snapshot registry (latest|pinned)"},"post":{"operationId":"publishIosContractSnapshotFixture","responses":{"200":{"description":"Contract snapshot publish payload"}},"summary":"Publish iOS contract snapshot fixture to registry"}},"/api/v1/contracts/snapshots/ios-bootstrap/registry-retention":{"get":{"operationId":"iosContractSnapshotRegistryRetentionPreview","responses":{"200":{"description":"Contract snapshot registry retention preview payload"}},"summary":"Preview iOS contract snapshot registry retention policy (keep_latest_n)"},"post":{"operationId":"iosContractSnapshotRegistryRetentionApply","responses":{"200":{"description":"Contract snapshot registry retention apply payload"}},"summary":"Apply iOS contract snapshot registry retention policy (dry_run|apply)"}},"/api/v1/contracts/snapshots/ios-bootstrap/validate":{"post":{"operationId":"validateIosContractSnapshotFixture","parameters":[{"in":"query","name":"policy_profile","schema":{"enum":["strict","compat"],"type":"string"}},{"in":"query","name":"format","schema":{"enum":["json","csv","md"],"type":"string"}}],"responses":{"200":{"description":"Contract snapshot validation payload"}},"summary":"Validate iOS contract snapshot fixture schema and checksum"}},"/api/v1/contracts/snapshots/ios-bootstrap/validate/policy-profiles":{"get":{"operationId":"iosContractSnapshotValidatorPolicyProfiles","responses":{"200":{"description":"Contract snapshot validator policy profile payload"}},"summary":"List iOS contract snapshot validator policy profiles"}},"/api/v1/contracts/snapshots/ios-bootstrap/validate/schema":{"get":{"operationId":"iosContractSnapshotValidatorSchema","parameters":[{"in":"query","name":"format","schema":{"enum":["json","schema"],"type":"string"}}],"responses":{"200":{"description":"Contract snapshot validator schema payload"}},"summary":"Export iOS contract snapshot validator JSON schema"}},"/api/v1/dashboard/workspaces":{"get":{"operationId":"listDashboardWorkspaces","responses":{"200":{"description":"Workspace rows"}},"summary":"List dashboard workspaces"},"post":{"operationId":"upsertDashboardWorkspace","responses":{"200":{"description":"Workspace saved"}},"summary":"Create or update dashboard workspace"}},"/api/v1/events/stream":{"get":{"operationId":"eventStream","responses":{"200":{"description":"Event envelope"}},"summary":"Typed event stream envelope"}},"/api/v1/growth/late-return-heatmap/anomalies/assignment":{"post":{"operationId":"growthHeatmapAnomalyAssignment","responses":{"200":{"description":"Anomaly assignment payload"}},"summary":"Assign/claim a heatmap anomaly operator lane"}},"/api/v1/growth/late-return-heatmap/anomalies/push-bridge":{"post":{"operationId":"growthHeatmapAnomalyPushBridge","responses":{"200":{"description":"Anomaly push bridge payload"}},"summary":"Bridge heatmap anomalies into mobile push inbox"}},"/api/v1/growth/late-return-heatmap/anomalies/sla-calendar-token":{"post":{"operationId":"issueGrowthHeatmapSlaCalendarToken","responses":{"200":{"description":"Heatmap SLA calendar token payload"}},"summary":"Issue signed heatmap SLA calendar feed token"}},"/api/v1/growth/late-return-heatmap/anomalies/sla-calendar-tokens":{"delete":{"operationId":"revokeGrowthHeatmapSlaCalendarToken","responses":{"200":{"description":"Heatmap SLA calendar token revoke payload"}},"summary":"Revoke heatmap SLA calendar feed token"},"get":{"operationId":"listGrowthHeatmapSlaCalendarTokens","responses":{"200":{"description":"Heatmap SLA calendar token list payload"}},"summary":"List heatmap SLA calendar feed token lifecycle rows"}},"/api/v1/growth/late-return-heatmap/anomalies/sla-digest":{"get":{"operationId":"growthHeatmapAnomalySlaDigest","parameters":[{"in":"query","name":"format","schema":{"enum":["json","ics"],"type":"string"}}],"responses":{"200":{"description":"Anomaly SLA digest payload"}},"summary":"Heatmap anomaly SLA + escalation digest"}},"/api/v1/growth/late-return-heatmap/anomalies/state":{"post":{"operationId":"growthHeatmapAnomalyState","responses":{"200":{"description":"Anomaly state payload"}},"summary":"Set heatmap anomaly operator state (ack/snooze/clear)"}},"/api/v1/growth/late-return-heatmap/borrowers/{borrower_user_id}":{"get":{"operationId":"growthHeatmapBorrowerDrilldown","parameters":[{"in":"path","name":"borrower_user_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"compare_mode","schema":{"enum":["single","triple"],"type":"string"}},{"in":"query","name":"compare_previous","schema":{"type":"boolean"}},{"in":"query","name":"seasonal_days","schema":{"maximum":3650,"minimum":30,"type":"integer"}},{"in":"query","name":"seasonal_offset_days","schema":{"maximum":365,"minimum":-365,"type":"integer"}}],"responses":{"200":{"description":"Borrower drilldown payload"}},"summary":"Borrower late-return drilldown"}},"/api/v1/growth/referral-credits/backtest-cross-model-validator":{"get":{"operationId":"referralBacktestCrossModelValidator","responses":{"200":{"description":"Referral backtest cross-model validator payload"}},"summary":"Cross-model referral backtest divergence validator"}},"/api/v1/growth/referral-credits/backtest-cross-model-validator/drilldown":{"get":{"operationId":"referralBacktestCrossModelValidatorDrilldown","responses":{"200":{"description":"Referral backtest cross-model drilldown payload"}},"summary":"Invite-level referral cross-model divergence drilldown"}},"/api/v1/growth/referral-credits/backtest-cross-model-validator/drilldown/bulk":{"post":{"operationId":"referralBacktestCrossModelValidatorDrilldownBulk","responses":{"200":{"description":"Referral backtest cross-model drilldown bulk payload"}},"summary":"Bulk referral cross-model divergence drilldown"}},"/api/v1/growth/referral-credits/backtest-signed-export":{"get":{"operationId":"referralBacktestSignedExport","parameters":[{"in":"query","name":"format","schema":{"enum":["json","csv"],"type":"string"}}],"responses":{"200":{"description":"Referral backtest signed export payload"}},"summary":"Referral backtest signed export artifact"}},"/api/v1/growth/referral-credits/backtest-signed-export/signing-keys":{"get":{"operationId":"referralBacktestSignedExportSigningKeys","responses":{"200":{"description":"Referral backtest signed-export signing-key inventory payload"}},"summary":"Referral backtest signed-export signature key inventory"}},"/api/v1/growth/referral-credits/backtest-signed-export/signing-keys/lifecycle":{"post":{"operationId":"referralBacktestSignedExportSigningKeysLifecycle","responses":{"200":{"description":"Referral backtest signing-key lifecycle payload"}},"summary":"Manage referral backtest signing-key lifecycle"}},"/api/v1/growth/referral-credits/backtest-signed-export/signing-keys/policy":{"get":{"operationId":"referralBacktestSignedExportSigningPolicy","responses":{"200":{"description":"Referral backtest signing policy payload"}},"summary":"Read referral backtest signing policy"},"post":{"operationId":"referralBacktestSignedExportSigningPolicyUpdate","responses":{"200":{"description":"Referral backtest signing policy update payload"}},"summary":"Update referral backtest signing policy"}},"/api/v1/growth/referral-credits/backtest-signed-export/signing-keys/policy/history":{"get":{"operationId":"referralBacktestSignedExportSigningPolicyHistory","parameters":[{"in":"query","name":"limit","schema":{"maximum":500,"minimum":1,"type":"integer"}},{"in":"query","name":"format","schema":{"enum":["json","csv","md"],"type":"string"}}],"responses":{"200":{"description":"Referral signed-export signature policy history payload"}},"summary":"List referral signed-export signature policy history"}},"/api/v1/growth/referral-credits/backtest-signed-export/signing-keys/rotation-digest":{"get":{"operationId":"referralBacktestSignedExportSigningKeyRotationDigest","responses":{"200":{"description":"Referral signing key rotation digest payload"}},"summary":"Referral signing key rotation digest and expiring notice"}},"/api/v1/growth/referral-credits/backtest-signed-export/verify":{"post":{"operationId":"referralBacktestSignedExportVerify","responses":{"200":{"description":"Referral backtest signed export verification payload"}},"summary":"Verify referral backtest signed export artifact"}},"/api/v1/growth/referral-credits/simulation-templates":{"delete":{"operationId":"deleteReferralSimulationTemplate","responses":{"200":{"description":"Referral simulation template delete payload"}},"summary":"Delete referral simulation template"},"get":{"operationId":"referralSimulationTemplates","responses":{"200":{"description":"Referral simulation template list payload"}},"summary":"List referral simulation templates"},"post":{"operationId":"upsertReferralSimulationTemplate","responses":{"200":{"description":"Referral simulation template upsert payload"}},"summary":"Upsert referral simulation template"}},"/api/v1/growth/referral-credits/simulation-templates/history":{"get":{"operationId":"referralSimulationTemplateHistory","responses":{"200":{"description":"Referral simulation template history payload"}},"summary":"List referral simulation template version history and compare snapshots"}},"/api/v1/growth/referral-credits/simulation-templates/review":{"post":{"operationId":"reviewReferralSimulationTemplate","responses":{"200":{"description":"Referral simulation template workflow payload"}},"summary":"Apply dual-approval workflow action for referral simulation template"}},"/api/v1/growth/referral-credits/simulation-templates/rollback":{"post":{"operationId":"rollbackReferralSimulationTemplate","responses":{"200":{"description":"Referral simulation template rollback payload"}},"summary":"Rollback referral simulation template to a prior version_id"}},"/api/v1/items":{"get":{"operationId":"listItems","parameters":[{"in":"query","name":"pagination_mode","schema":{"enum":["page","cursor"],"type":"string"}},{"in":"query","name":"cursor","schema":{"minimum":0,"type":"integer"}},{"in":"query","name":"per_page","schema":{"maximum":200,"minimum":1,"type":"integer"}},{"in":"query","name":"q","schema":{"type":"string"}}],"responses":{"200":{"description":"Items response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"}},"summary":"List owner inventory"}},"/api/v1/items/{item_id}":{"get":{"operationId":"getNativeInventoryItem","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Exact owner-scoped editable item"},"401":{"description":"Unauthorized"},"403":{"description":"Insufficient scope"},"404":{"description":"Item not found"}},"x-rms-cache-control":"private, no-store","x-rms-privacy-boundary":"Returns only the authenticated owner's exact private item identity fields and an opaque edit version.","x-rms-required-scope":"inventory:read","x-rms-retry-policy":"Read-only and safe to retry."},"patch":{"operationId":"updateNativeInventoryItem","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Reviewed private item fields updated"},"400":{"description":"Invalid request"},"401":{"description":"Unauthorized"},"403":{"description":"Insufficient scope"},"404":{"description":"Item not found"},"409":{"description":"Edit conflict"}},"x-rms-cache-control":"private, no-store","x-rms-privacy-boundary":"Changes only name, description, and serial number after exact review.","x-rms-required-scope":"inventory:write","x-rms-retry-policy":"Requires Idempotency-Key and the opaque edit version from a fresh exact-item read."}},"/api/v1/items/{item_id}/evidence-catalog":{"get":{"operationId":"getInventoryItemEvidenceCatalog","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"limit","required":false,"schema":{"default":12,"maximum":24,"minimum":1,"type":"integer"}},{"in":"query","name":"page","required":false,"schema":{"default":1,"maximum":96,"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Bounded owner-scoped opaque evidence catalog"},"401":{"description":"Unauthorized"},"403":{"description":"Insufficient scope"},"404":{"description":"Item not found"}},"x-rms-cache-control":"private, no-store","x-rms-privacy-boundary":"Returns short-lived opaque references, category, and recorded time; excludes photo IDs, paths, URLs, notes, locations, uploaders, and loan IDs.","x-rms-required-scope":"inventory:read","x-rms-retry-policy":"Read-only and safe to retry. No media is downloaded until a separate explicit thumbnail request."}},"/api/v1/items/{item_id}/evidence-summary":{"get":{"operationId":"getInventoryItemEvidenceSummary","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Bounded owner-scoped private evidence summary"},"401":{"description":"Unauthorized"},"403":{"description":"Insufficient scope"},"404":{"description":"Item not found"}},"x-rms-cache-control":"private, no-store","x-rms-privacy-boundary":"Returns counts and latest category and time only; no media, storage path, note, location, or participant identity is returned.","x-rms-required-scope":"inventory:read","x-rms-retry-policy":"Read-only and safe to retry."}},"/api/v1/items/{item_id}/evidence/{reference}/full":{"get":{"operationId":"getInventoryItemEvidenceFull","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"path","name":"reference","required":true,"schema":{"minLength":16,"type":"string"}}],"responses":{"200":{"description":"Protected full-resolution JPEG bytes"},"401":{"description":"Unauthorized"},"403":{"description":"Insufficient scope"},"404":{"description":"Evidence photo not found"}},"x-rms-cache-control":"private, no-store","x-rms-privacy-boundary":"Requires a single-purpose owner and item-bound reference and serves at most 8 MiB from private storage.","x-rms-required-scope":"inventory:read","x-rms-retry-policy":"Read-only and safe to retry while the full-resolution reference remains valid."}},"/api/v1/items/{item_id}/evidence/{reference}/full-reference":{"get":{"operationId":"getInventoryItemEvidenceFullReference","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"path","name":"reference","required":true,"schema":{"minLength":16,"type":"string"}}],"responses":{"200":{"description":"Short-lived full-resolution reference"},"401":{"description":"Unauthorized"},"403":{"description":"Insufficient scope"},"404":{"description":"Evidence photo not found"}},"x-rms-cache-control":"private, no-store","x-rms-privacy-boundary":"Returns a separate 60-second reference after explicit thumbnail review. No media, photo ID, path, or reusable URL is returned.","x-rms-required-scope":"inventory:read","x-rms-retry-policy":"Read-only and safe to retry while the selected thumbnail reference remains valid."}},"/api/v1/items/{item_id}/evidence/{reference}/thumbnail":{"get":{"operationId":"getInventoryItemEvidenceThumbnail","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"path","name":"reference","required":true,"schema":{"minLength":16,"type":"string"}}],"responses":{"200":{"description":"Protected JPEG thumbnail bytes"},"401":{"description":"Unauthorized"},"403":{"description":"Insufficient scope"},"404":{"description":"Evidence thumbnail not found"}},"x-rms-cache-control":"private, no-store","x-rms-privacy-boundary":"Accepts only a short-lived owner and item-bound reference. Raw photo IDs and storage paths are never accepted.","x-rms-required-scope":"inventory:read","x-rms-retry-policy":"Read-only and safe to retry while the opaque reference remains valid."}},"/api/v1/items/{item_id}/social-export/bundle-verify":{"post":{"operationId":"socialExportBundleVerify","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Social-export bundle verification payload"}},"summary":"Verify uploaded social-export bundle artifact"}},"/api/v1/items/{item_id}/social-export/ingest":{"post":{"operationId":"socialExportBundleIngest","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Social-export bundle ingest payload"}},"summary":"Ingest and canonical-parse uploaded social-export bundle"}},"/api/v1/items/{item_id}/social-export/ingest/chunk":{"post":{"operationId":"socialExportBundleChunkIngest","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Social-export chunk ingest payload"}},"summary":"Upload one social-export bundle chunk with resume metadata"}},"/api/v1/items/{item_id}/social-export/ingest/finalize":{"post":{"operationId":"socialExportBundleChunkFinalize","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Social-export chunk finalize payload"}},"summary":"Finalize chunked social-export ingest with checksum verification"}},"/api/v1/items/{item_id}/social-export/verify":{"post":{"operationId":"socialExportVerify","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Social-export verification payload"}},"summary":"Verify detached social-export signature payload"}},"/api/v1/items/{item_id}/story-share/manifest-verify":{"post":{"operationId":"storyGraphManifestVerify","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Story-graph manifest verification payload"}},"summary":"Verify story-graph render manifest signature + checksum"}},"/api/v1/loans/{loan_id}/external-share-links/auto-expire-sweep":{"post":{"operationId":"externalShareLinkAutoExpireSweep","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Auto-expire sweep payload"}},"summary":"Run external-link auto-expire sweep"}},"/api/v1/loans/{loan_id}/external-share-links/digest":{"get":{"operationId":"externalShareLinkDigest","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Lifecycle digest payload"}},"summary":"External link lifecycle digest"}},"/api/v1/loans/{loan_id}/external-share-links/digest/baselines":{"get":{"operationId":"externalShareLinkDigestBaselines","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Digest baseline list payload"}},"summary":"List external-link digest baselines"},"post":{"operationId":"createExternalShareLinkDigestBaseline","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Digest baseline snapshot payload"}},"summary":"Create external-link digest baseline snapshot"}},"/api/v1/loans/{loan_id}/external-share-links/digest/baselines/drift-alert":{"get":{"operationId":"externalShareLinkDigestBaselineDriftAlert","responses":{"200":{"description":"Digest baseline drift alert payload"}},"summary":"Detect digest baseline drift against current lifecycle digest"}},"/api/v1/loans/{loan_id}/external-share-links/digest/baselines/drift-alert/actions":{"post":{"operationId":"externalShareLinkDigestBaselineDriftAlertAction","responses":{"200":{"description":"Digest baseline drift workflow action payload"}},"summary":"Apply digest baseline drift workflow action (ack|snooze|clear)"}},"/api/v1/loans/{loan_id}/external-share-links/digest/baselines/drift-alert/push-bridge":{"post":{"operationId":"externalShareLinkDigestBaselineDriftAlertPushBridge","responses":{"200":{"description":"Digest baseline drift push bridge payload"}},"summary":"Bridge critical digest baseline drift alerts to owner push inbox"}},"/api/v1/loans/{loan_id}/external-share-links/digest/baselines/drift-alert/ticket-bridge":{"post":{"operationId":"externalShareLinkDigestBaselineDriftAlertTicketBridge","responses":{"200":{"description":"Digest baseline drift ticket bridge payload"}},"summary":"Bridge critical digest baseline drift alerts into ticket workflow payloads"}},"/api/v1/loans/{loan_id}/external-share-links/digest/baselines/pin":{"post":{"operationId":"pinExternalShareLinkDigestBaseline","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Digest baseline pin payload"}},"summary":"Pin or unpin digest baseline with note metadata"}},"/api/v1/loans/{loan_id}/external-share-links/digest/baselines/retention":{"get":{"operationId":"previewExternalShareLinkDigestBaselineRetention","responses":{"200":{"description":"Digest baseline retention preview payload"}},"summary":"Preview digest baseline retention/archive candidates"},"post":{"operationId":"applyExternalShareLinkDigestBaselineRetention","responses":{"200":{"description":"Digest baseline retention apply payload"}},"summary":"Apply digest baseline retention/archive policy"}},"/api/v1/loans/{loan_id}/external-share-links/digest/compare":{"get":{"operationId":"externalShareLinkDigestCompare","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Lifecycle digest compare payload"}},"summary":"Compare current external-link digest against prior signature window"}},"/api/v1/loans/{loan_id}/external-share-links/inventory":{"get":{"operationId":"externalShareLinkInventory","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Nonce inventory payload"}},"summary":"External link nonce inventory"}},"/api/v1/loans/{loan_id}/external-share-links/webhook-ledger":{"get":{"operationId":"externalShareLinkWebhookLedger","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Webhook delivery ledger payload"}},"summary":"External-link webhook delivery ledger export"}},"/api/v1/loans/{loan_id}/external-share-links/webhook-ledger/dead-letter-triage":{"get":{"operationId":"externalShareLinkWebhookDeadLetterTriage","responses":{"200":{"description":"Webhook dead-letter triage payload"}},"summary":"List webhook dead-letter triage board by taxonomy/owner/age"}},"/api/v1/loans/{loan_id}/external-share-links/webhook-ledger/retry":{"post":{"operationId":"externalShareLinkWebhookRetry","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Webhook ledger retry payload"}},"summary":"Replay failed external-link webhook ledger rows"}},"/api/v1/loans/{loan_id}/external-share-links/webhook-ledger/retry-keys":{"get":{"operationId":"externalShareLinkWebhookRetryKeySearch","responses":{"200":{"description":"Webhook retry-key search payload"}},"summary":"Search webhook retry-key lineage"}},"/api/v1/marketplace/contracts":{"get":{"operationId":"marketplaceContracts","responses":{"200":{"description":"Marketplace contract payload"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"}},"summary":"Marketplace contract metadata"}},"/api/v1/marketplace/local-demand":{"get":{"operationId":"marketplaceLocalDemand","parameters":[{"in":"query","name":"near_lat","schema":{"type":"number"}},{"in":"query","name":"near_lng","schema":{"type":"number"}},{"in":"query","name":"radius_miles","schema":{"minimum":1,"type":"number"}},{"in":"query","name":"category_id","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"subcategory_id","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"location_preset","schema":{"type":"string"}},{"in":"query","name":"map_bounds","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"maximum":12,"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Local-demand rows"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Scope required"}},"summary":"List marketplace local demand for phone and tablet clients"}},"/api/v1/marketplace/map":{"get":{"operationId":"marketplaceMap","parameters":[{"in":"query","name":"q","schema":{"type":"string"}},{"in":"query","name":"scope","schema":{"type":"string"}},{"in":"query","name":"availability","schema":{"type":"string"}},{"in":"query","name":"sort","schema":{"type":"string"}},{"in":"query","name":"near_lat","schema":{"type":"number"}},{"in":"query","name":"near_lng","schema":{"type":"number"}},{"in":"query","name":"radius_miles","schema":{"minimum":1,"type":"number"}},{"in":"query","name":"category_id","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"subcategory_id","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"location_preset","schema":{"type":"string"}},{"in":"query","name":"map_bounds","schema":{"type":"string"}},{"in":"query","name":"map_zoom","schema":{"maximum":18,"minimum":3,"type":"integer"}},{"in":"query","name":"map_focus_item_id","schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"pin_privacy","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Map pins and listing rows"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Scope required"}},"summary":"List marketplace map pins, clusters, density, availability, and directions for phone and tablet clients"}},"/api/v1/marketplace/schema":{"get":{"operationId":"marketplaceSchema","responses":{"200":{"description":"Marketplace schema payload"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"}},"summary":"Marketplace schema overview"}},"/api/v1/messages/attachment-mime-overrides":{"delete":{"operationId":"deleteAttachmentMimeOverride","responses":{"200":{"description":"MIME override delete payload"}},"summary":"Delete attachment MIME override policy"},"get":{"operationId":"listAttachmentMimeOverrides","responses":{"200":{"description":"MIME override payload"}},"summary":"List attachment MIME override policies"},"post":{"operationId":"upsertAttachmentMimeOverride","responses":{"200":{"description":"MIME override upsert payload"}},"summary":"Upsert attachment MIME override policy"}},"/api/v1/messages/attachment-mime-overrides/diff":{"get":{"operationId":"attachmentMimeOverrideDiff","responses":{"200":{"description":"MIME override diff payload"}},"summary":"Diff attachment MIME override effective policy before/after"}},"/api/v1/messages/attachment-mime-overrides/explain":{"get":{"operationId":"attachmentMimeOverrideExplain","responses":{"200":{"description":"MIME policy explain payload"}},"summary":"Explain effective attachment MIME policy merge precedence"}},"/api/v1/messages/translation-glossary-profiles":{"delete":{"operationId":"deleteTranslationGlossaryProfile","responses":{"200":{"description":"Glossary profile delete payload"}},"summary":"Delete translation glossary profile"},"get":{"operationId":"translationGlossaryProfiles","responses":{"200":{"description":"Glossary profile payload"}},"summary":"Translation glossary profiles"},"post":{"operationId":"upsertTranslationGlossaryProfile","responses":{"200":{"description":"Glossary profile upsert payload"}},"summary":"Upsert translation glossary profile"}},"/api/v1/messages/translation-glossary-profiles/export":{"get":{"operationId":"exportTranslationGlossaryProfiles","responses":{"200":{"description":"Glossary export payload"}},"summary":"Export translation glossary profiles"}},"/api/v1/messages/translation-glossary-profiles/import":{"post":{"operationId":"importTranslationGlossaryProfiles","responses":{"200":{"description":"Glossary import payload"}},"summary":"Import translation glossary profiles"}},"/api/v1/messages/translation-glossary-profiles/snapshots":{"get":{"operationId":"translationGlossarySnapshots","responses":{"200":{"description":"Glossary snapshot list payload"}},"summary":"List translation glossary snapshots"},"post":{"operationId":"createTranslationGlossarySnapshot","responses":{"200":{"description":"Glossary snapshot create payload"}},"summary":"Create translation glossary snapshot"}},"/api/v1/messages/translation-glossary-profiles/snapshots/diff":{"get":{"operationId":"translationGlossarySnapshotDiff","responses":{"200":{"description":"Glossary snapshot diff payload"}},"summary":"Diff two translation glossary snapshots"}},"/api/v1/messages/translation-glossary-profiles/snapshots/rollback":{"post":{"operationId":"rollbackTranslationGlossarySnapshot","responses":{"200":{"description":"Glossary snapshot rollback payload"}},"summary":"Rollback translation glossary profiles from snapshot"}},"/api/v1/messages/translation-provider-health":{"get":{"operationId":"translationProviderHealth","responses":{"200":{"description":"Translation provider health payload"}},"summary":"Translation provider health telemetry"}},"/api/v1/messages/translation-provider-health/anomaly-suppressions":{"delete":{"operationId":"deleteTranslationProviderAnomalySuppression","responses":{"200":{"description":"Translation anomaly suppression clear payload"}},"summary":"Clear translation provider anomaly suppression window"},"get":{"operationId":"translationProviderAnomalySuppressions","responses":{"200":{"description":"Translation anomaly suppression payload"}},"summary":"List translation provider anomaly suppression windows"},"post":{"operationId":"setTranslationProviderAnomalySuppression","responses":{"200":{"description":"Translation anomaly suppression set payload"}},"summary":"Create/update translation provider anomaly suppression window"}},"/api/v1/messages/translation-provider-health/anomaly-suppressions/auto-ack-policy":{"get":{"operationId":"translationProviderAnomalySuppressionAutoAckPolicy","responses":{"200":{"description":"Translation suppression auto-ack policy payload"}},"summary":"Read translation suppression auto-ack policy"},"post":{"operationId":"updateTranslationProviderAnomalySuppressionAutoAckPolicy","responses":{"200":{"description":"Translation suppression auto-ack policy update payload"}},"summary":"Update translation suppression auto-ack policy"}},"/api/v1/messages/translation-provider-health/anomaly-suppressions/auto-renew-policy":{"get":{"operationId":"translationProviderAnomalySuppressionAutoRenewPolicy","responses":{"200":{"description":"Translation suppression auto-renew policy payload"}},"summary":"Read translation suppression auto-renew policy"},"post":{"operationId":"updateTranslationProviderAnomalySuppressionAutoRenewPolicy","responses":{"200":{"description":"Translation suppression auto-renew policy update payload"}},"summary":"Update translation suppression auto-renew policy"}},"/api/v1/messages/translation-provider-health/anomaly-suppressions/auto-renew-scheduler-digest":{"get":{"operationId":"translationProviderAnomalySuppressionAutoRenewSchedulerDigest","responses":{"200":{"description":"Translation suppression auto-renew scheduler digest payload"}},"summary":"Translation suppression auto-renew scheduler digest"}},"/api/v1/messages/translation-provider-health/anomaly-suppressions/auto-renew-scheduler-run":{"post":{"operationId":"translationProviderAnomalySuppressionAutoRenewSchedulerRun","responses":{"200":{"description":"Translation suppression auto-renew run payload"}},"summary":"Execute translation suppression auto-renew scheduler"}},"/api/v1/messages/translation-provider-health/anomaly-suppressions/expiring-digest-delivery":{"get":{"operationId":"translationProviderAnomalySuppressionExpiringDigestDelivery","responses":{"200":{"description":"Translation suppression expiring digest delivery payload"}},"summary":"Preview translation suppression expiring digest delivery lanes"},"post":{"operationId":"dispatchTranslationProviderAnomalySuppressionExpiringDigestDelivery","responses":{"200":{"description":"Translation suppression expiring digest dispatch payload"}},"summary":"Dispatch translation suppression expiring digest delivery lanes"}},"/api/v1/messages/translation-provider-health/anomaly-suppressions/expiring-digest-delivery/ack":{"post":{"operationId":"ackTranslationProviderAnomalySuppressionExpiringDigestDelivery","responses":{"200":{"description":"Translation suppression expiring digest acknowledgment payload"}},"summary":"Acknowledge translation suppression expiring digest delivery receipt"}},"/api/v1/messages/translation-provider-health/anomaly-suppressions/expiring-digest-delivery/ack-sla":{"get":{"operationId":"translationProviderAnomalySuppressionExpiringDigestAckSla","responses":{"200":{"description":"Translation expiring digest ack SLA payload"}},"summary":"Translation expiring digest delivery ack SLA digest"}},"/api/v1/messages/translation-provider-health/anomaly-suppressions/expiring-digest-delivery/ack-sla/webhook-preview":{"get":{"operationId":"translationProviderAnomalySuppressionExpiringDigestAckSlaWebhookPreview","responses":{"200":{"description":"Translation expiring digest ack-SLA webhook preview payload"}},"summary":"Preview translation expiring digest ack-SLA webhook payload"}},"/api/v1/messages/translation-provider-health/anomaly-suppressions/expiring-digest-delivery/ack-sla/webhook-receipts":{"get":{"operationId":"translationProviderAnomalySuppressionExpiringDigestAckSlaWebhookReceipts","responses":{"200":{"description":"Translation expiring digest ack-SLA webhook receipts payload"}},"summary":"List translation expiring digest ack-SLA webhook delivery receipts"},"post":{"operationId":"translationProviderAnomalySuppressionExpiringDigestAckSlaWebhookReceiptsPost","responses":{"200":{"description":"Translation expiring digest ack-SLA webhook receipt payload"}},"summary":"Record translation expiring digest ack-SLA webhook delivery receipt"}},"/api/v1/messages/translation-provider-health/circuit-breaker-overrides":{"delete":{"operationId":"deleteTranslationProviderCircuitBreakerOverride","responses":{"200":{"description":"Translation circuit-breaker override clear payload"}},"summary":"Clear translation provider circuit-breaker override"},"get":{"operationId":"translationProviderCircuitBreakerOverrides","responses":{"200":{"description":"Translation circuit-breaker override payload"}},"summary":"List translation provider circuit-breaker override state"},"post":{"operationId":"setTranslationProviderCircuitBreakerOverride","responses":{"200":{"description":"Translation circuit-breaker override set payload"}},"summary":"Set translation provider circuit-breaker override"}},"/api/v1/messages/translation-provider-health/cohort-performance":{"get":{"operationId":"translationProviderRolloutCohortPerformance","responses":{"200":{"description":"Translation rollout cohort performance payload"}},"summary":"Translation provider rollout cohort performance lane"}},"/api/v1/messages/translation-provider-health/cohort-performance/anomaly-detector":{"get":{"operationId":"translationProviderRolloutCohortAnomalyDetector","responses":{"200":{"description":"Translation rollout cohort anomaly payload"}},"summary":"Translation rollout cohort anomaly detector"}},"/api/v1/messages/translation-provider-health/cohort-performance/timeseries":{"get":{"operationId":"translationProviderRolloutCohortPerformanceTimeseries","parameters":[{"in":"query","name":"lane","schema":{"type":"string"}},{"in":"query","name":"days","schema":{"maximum":3650,"minimum":1,"type":"integer"}},{"in":"query","name":"format","schema":{"enum":["csv","md"],"type":"string"}}],"responses":{"200":{"description":"Translation rollout cohort performance timeseries payload"}},"summary":"Translation provider rollout cohort performance timeseries export"}},"/api/v1/missing":{"get":{"operationId":"listNativeMissingReports","parameters":[{"in":"query","name":"status","required":false,"schema":{"default":"all","enum":["all","open","resolved","cancelled"],"type":"string"}},{"in":"query","name":"page","required":false,"schema":{"default":1,"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","required":false,"schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeMissingReportListResponse"}}},"description":"Owner-scoped missing-report list","headers":{"Cache-Control":{"schema":{"enum":["private, no-store"],"type":"string"}},"Pragma":{"schema":{"enum":["no-cache"],"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid status filter"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"recovery read or write scope required"}},"security":[{"bearerAuth":["recovery:read"]},{"bearerAuth":["recovery:write"]}],"summary":"List missing reports owned by the authenticated account","x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":"Read only. Does not change reports, send notifications, or contact an external provider.","x-rms-privacy-boundary":"Returns only reports whose reporter_user_id matches the authenticated token account. Contact, description, serial, exact location, responder data, and raw photo paths are excluded.","x-rms-required-scope-any":["recovery:read","recovery:write"]},"post":{"operationId":"createNativeMissingReport","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeMissingReportCreate"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeMissingReportCreateResponse"}}},"description":"Created report or exact idempotent replay","headers":{"Cache-Control":{"schema":{"enum":["private, no-store"],"type":"string"}},"Pragma":{"schema":{"enum":["no-cache"],"type":"string"}},"X-Idempotency-Replayed":{"required":false,"schema":{"enum":["1"],"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid fields, review, taxonomy, coordinates, or idempotency key"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"recovery:write scope required"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Idempotency conflict"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Content-Type must be application/json"}},"security":[{"bearerAuth":["recovery:write"]}],"summary":"Create a reviewed missing report for the authenticated account","x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":"Creates one account-bound missing report. Does not send notifications, email, upload photos, or contact an external provider.","x-rms-required-scope":"recovery:write","x-rms-retry-policy":"Requires Idempotency-Key. Exact retries replay the stored receipt without creating another report.","x-rms-review-boundary":"review_confirmed must be true and the exact native missing-report contract version must be supplied."}},"/api/v1/missing/{report_id}/workflow":{"get":{"operationId":"getMissingReportWorkflow","parameters":[{"in":"path","name":"report_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Workflow payload"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Admin required"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Missing report not found"}},"summary":"Read missing-report responder workflow"},"post":{"operationId":"updateMissingReportWorkflow","parameters":[{"in":"path","name":"report_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Updated workflow payload"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Validation error"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Admin required"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Missing report not found"}},"summary":"Update missing-report responder workflow"}},"/api/v1/mobile/app-readiness":{"get":{"operationId":"mobileAppReadiness","responses":{"200":{"description":"Mobile app readiness payload"}},"summary":"Public mobile app readiness contract for PWA, iOS, iPad/tablet, and Android sequencing"}},"/api/v1/mobile/attachment-policy-capabilities":{"get":{"operationId":"mobileAttachmentPolicyCapabilities","responses":{"200":{"description":"Attachment capability payload"}},"summary":"Mobile attachment policy capability bootstrap"}},"/api/v1/mobile/camera-quality-check":{"post":{"operationId":"mobileCameraQualityCheck","responses":{"200":{"description":"Quality evaluation payload"}},"summary":"Evaluate mobile camera frame quality hints before upload"}},"/api/v1/mobile/field-audit/checkin":{"post":{"operationId":"mobileFieldAuditCheckin","responses":{"200":{"description":"Field-audit check-in recorded"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"}},"summary":"Submit field-audit check-in from mobile clients"}},"/api/v1/mobile/growth/offline-cache-contract":{"get":{"operationId":"mobileGrowthOfflineCacheContract","responses":{"200":{"description":"Offline cache contract payload"}},"summary":"Mobile growth offline-cache manifest contract"}},"/api/v1/mobile/growth/offline-cache-delta":{"get":{"operationId":"mobileGrowthOfflineCacheDelta","parameters":[{"in":"query","name":"cache_key","schema":{"type":"string"}},{"in":"query","name":"client_cache_key","schema":{"type":"string"}}],"responses":{"200":{"description":"Offline cache delta payload"}},"summary":"Mobile growth offline-cache delta-sync payload"}},"/api/v1/mobile/growth/push-channel-policy":{"delete":{"operationId":"deleteMobileGrowthPushChannelPolicy","responses":{"200":{"description":"Push channel policy delete payload"}},"summary":"Delete mobile push channel quiet-hours override"},"get":{"operationId":"mobileGrowthPushChannelPolicy","responses":{"200":{"description":"Push channel policy payload"}},"summary":"List per-channel mobile push quiet-hours overrides"},"post":{"operationId":"upsertMobileGrowthPushChannelPolicy","responses":{"200":{"description":"Push channel policy upsert payload"}},"summary":"Upsert mobile push channel quiet-hours override"}},"/api/v1/mobile/growth/push-summary":{"get":{"operationId":"mobileGrowthPushSummary","parameters":[{"in":"query","name":"locale","schema":{"enum":["en","es"],"type":"string"}},{"in":"query","name":"channel","schema":{"enum":["push","email","in_app"],"type":"string"}}],"responses":{"200":{"description":"Push summary payload"}},"summary":"Mobile growth push summary payload"}},"/api/v1/mobile/ios/app-clip-contract":{"get":{"operationId":"iosAppClipContract","responses":{"200":{"description":"App Clip contract payload"}},"summary":"iOS App Clip fallback contract"}},"/api/v1/mobile/ios/biometric-stepup-contract":{"get":{"operationId":"iosBiometricStepupContract","responses":{"200":{"description":"Biometric step-up contract payload"}},"summary":"iOS biometric step-up contract"}},"/api/v1/mobile/ios/biometric-stepup/challenge":{"post":{"operationId":"iosBiometricStepupChallenge","responses":{"200":{"description":"Biometric challenge payload"}},"summary":"Issue iOS biometric step-up challenge"}},"/api/v1/mobile/ios/bootstrap-bundle":{"get":{"operationId":"iosBootstrapBundle","parameters":[{"in":"query","name":"sections","schema":{"type":"string"}},{"in":"query","name":"app_version","schema":{"type":"string"}},{"in":"query","name":"channel","schema":{"type":"string"}},{"in":"query","name":"days","schema":{"maximum":3650,"minimum":7,"type":"integer"}}],"responses":{"200":{"description":"iOS bootstrap bundle payload"}},"summary":"iOS bootstrap bundle (partial sections supported: compatibility/changefeed/ops)"}},"/api/v1/mobile/ios/bootstrap-bundle/delta":{"get":{"operationId":"iosBootstrapBundleDelta","responses":{"200":{"description":"iOS bootstrap delta payload"}},"summary":"iOS bootstrap bundle delta lane by since_checksum"}},"/api/v1/mobile/ios/bootstrap-bundle/delta/baseline":{"get":{"operationId":"iosBootstrapBundleDeltaBaseline","responses":{"200":{"description":"iOS bootstrap delta baseline payload"}},"summary":"iOS bootstrap delta baseline-by-checksum diagnostics"}},"/api/v1/mobile/ios/bootstrap-bundle/delta/change-summary":{"get":{"operationId":"iosBootstrapBundleDeltaChangeSummary","responses":{"200":{"description":"iOS bootstrap delta change-summary payload"}},"summary":"iOS bootstrap delta change-summary lane (added|removed|changed field map)"}},"/api/v1/mobile/ios/bootstrap-bundle/section-digests":{"get":{"operationId":"iosBootstrapBundleSectionDigests","responses":{"200":{"description":"iOS bootstrap section digest manifest payload"}},"summary":"iOS bootstrap section-level digest manifest"}},"/api/v1/mobile/ios/bootstrap-bundle/signed":{"get":{"operationId":"iosBootstrapBundleSigned","responses":{"200":{"description":"Signed iOS bootstrap bundle artifact payload"}},"summary":"Signed iOS bootstrap bundle artifact"}},"/api/v1/mobile/ios/bootstrap-bundle/signed/verify":{"post":{"operationId":"iosBootstrapBundleSignedVerify","responses":{"200":{"description":"Bootstrap signed artifact verification payload"}},"summary":"Verify iOS bootstrap bundle signed artifact checksum/signature"}},"/api/v1/mobile/ios/bootstrap-bundle/signed/verify-batch":{"post":{"operationId":"iosBootstrapBundleSignedVerifyBatch","parameters":[{"in":"query","name":"format","schema":{"enum":["json","csv","md"],"type":"string"}}],"responses":{"200":{"description":"Batch verification payload"}},"summary":"Batch-verify signed iOS bootstrap artifacts"}},"/api/v1/mobile/ios/bootstrap-bundle/signed/verify-batch/jobs":{"post":{"operationId":"iosBootstrapBundleSignedVerifyBatchJob","responses":{"200":{"description":"iOS bootstrap verify-batch job payload"}},"summary":"Enqueue async iOS bootstrap verify-batch job"}},"/api/v1/mobile/ios/bootstrap-bundle/signed/verify-batch/jobs/{job_token}":{"get":{"operationId":"iosBootstrapBundleSignedVerifyBatchJobStatus","responses":{"200":{"description":"iOS bootstrap verify-batch job status payload"}},"summary":"Get async iOS bootstrap verify-batch job status"}},"/api/v1/mobile/ios/bootstrap-bundle/signed/verify-batch/jobs/{job_token}/cancel":{"post":{"operationId":"iosBootstrapBundleSignedVerifyBatchJobCancel","responses":{"200":{"description":"iOS bootstrap verify-batch job cancel payload"}},"summary":"Cancel async iOS bootstrap verify-batch job"}},"/api/v1/mobile/ios/bootstrap-bundle/signed/verify-batch/jobs/{job_token}/download":{"get":{"operationId":"iosBootstrapBundleSignedVerifyBatchJobDownload","responses":{"200":{"description":"iOS bootstrap verify-batch job artifact"}},"summary":"Download async iOS bootstrap verify-batch job artifact"}},"/api/v1/mobile/ios/bootstrap-bundle/signed/verify-batch/jobs/{job_token}/retry":{"post":{"operationId":"iosBootstrapBundleSignedVerifyBatchJobRetry","responses":{"200":{"description":"iOS bootstrap verify-batch job retry payload"}},"summary":"Retry async iOS bootstrap verify-batch job"}},"/api/v1/mobile/ios/bootstrap-bundle/signing-keys":{"get":{"operationId":"iosBootstrapBundleSigningKeys","responses":{"200":{"description":"iOS bootstrap signing key inventory payload"}},"summary":"iOS bootstrap signing key inventory (active|next|retired)"}},"/api/v1/mobile/ios/bootstrap-bundle/signing-keys/lifecycle":{"post":{"operationId":"iosBootstrapBundleSigningKeysLifecycle","responses":{"200":{"description":"iOS bootstrap signing-key lifecycle payload"}},"summary":"Submit/confirm iOS bootstrap signing-key lifecycle actions (schedule_rotate|retire)"}},"/api/v1/mobile/ios/growth-contract":{"get":{"operationId":"iosGrowthContract","responses":{"200":{"description":"Growth contract payload"}},"summary":"iOS growth analytics contract"}},"/api/v1/mobile/ios/growth-contract/compatibility":{"get":{"operationId":"iosGrowthContractCompatibility","responses":{"200":{"description":"Growth compatibility payload"}},"summary":"iOS growth contract compatibility matrix"}},"/api/v1/mobile/ios/growth-contract/rollout-policy":{"get":{"operationId":"iosGrowthContractRolloutPolicy","responses":{"200":{"description":"Growth rollout policy payload"}},"summary":"iOS growth rollout feature-gate policy"}},"/api/v1/mobile/ios/growth-contract/signed-schema":{"get":{"operationId":"iosGrowthContractSignedSchema","responses":{"200":{"description":"Signed schema payload"}},"summary":"Signed JSON schema for iOS growth contract codegen verification"}},"/api/v1/mobile/ios/growth-contract/signed-schema/verify":{"post":{"operationId":"iosGrowthContractSignedSchemaVerify","responses":{"200":{"description":"Signed schema verification payload"}},"summary":"Verify iOS signed growth schema checksum and signature"}},"/api/v1/mobile/ios/growth-contract/test-vectors":{"get":{"operationId":"iosGrowthContractTestVectors","responses":{"200":{"description":"Growth contract test vectors payload"}},"summary":"iOS/mobile growth contract test vectors for SDK CI"}},"/api/v1/mobile/ios/growth-contract/versions":{"get":{"operationId":"iosGrowthContractVersions","responses":{"200":{"description":"Growth contract version history payload"}},"summary":"iOS growth contract version history"}},"/api/v1/mobile/ios/live-activities-contract":{"get":{"operationId":"iosLiveActivitiesContract","responses":{"200":{"description":"Live Activities contract payload"}},"summary":"iOS Live Activities contract"}},"/api/v1/mobile/ios/quick-return-contract":{"get":{"operationId":"iosQuickReturnContract","parameters":[{"in":"query","name":"loan_id","schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Quick-return contract payload"}},"summary":"iOS quick-return flow contract"}},"/api/v1/mobile/ios/safe-mode-policy":{"get":{"operationId":"iosSafeModePolicy","responses":{"200":{"description":"Safe-mode policy payload"}},"summary":"iOS shared-device safe-mode policy"}},"/api/v1/mobile/ios/secure-attachment-staging-contract":{"get":{"operationId":"iosAttachmentStagingContract","responses":{"200":{"description":"Attachment staging contract payload"}},"summary":"iOS secure attachment staging contract"}},"/api/v1/mobile/ios/widget-contract":{"get":{"operationId":"iosWidgetContract","responses":{"200":{"description":"Widget contract payload"}},"summary":"iOS widget contract"}},"/api/v1/mobile/offline-conflicts/{operation_uuid}/resolve":{"post":{"operationId":"mobileOfflineConflictResolve","parameters":[{"in":"path","name":"operation_uuid","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Offline conflict resolved"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Operation not found"}},"summary":"Resolve a mobile offline conflict operation"}},"/api/v1/mobile/offline-queue":{"get":{"operationId":"listMobileOfflineQueue","parameters":[{"in":"query","name":"status","schema":{"default":"all","enum":["all","cancelled","conflict_detected","failed","in_progress","pending","requires_manual_merge","resolved","upload_staged"],"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"examples":{"one_pending_operation":{"value":{"data":[{"attempt_count":0,"conflict_comparison":null,"created_at":"2026-08-06T12:00:00+00:00","last_error":null,"operation_type":"sync_update","operation_uuid":"offline-example-1","payload":{},"priority":100,"resolution":{},"status":"pending","updated_at":"2026-08-06T12:00:00+00:00"}],"meta":{"auth_mode":"api_token","generated_at":"2026-08-06T12:00:00+00:00","limit":50,"status":"all","token_id":1},"ok":true,"summary":{"by_status":{"pending":1},"cancelled_count":0,"conflict_count":0,"failed_count":0,"in_progress_count":0,"pending_count":1,"resolved_count":0,"total":1}}}},"schema":{"$ref":"#/components/schemas/OfflineQueueListResponse"}}},"description":"Private owner-scoped offline queue list","headers":{"Cache-Control":{"schema":{"enum":["private, no-store"],"type":"string"}},"Vary":{"example":"Authorization, Cookie","schema":{"type":"string"}}}},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Authentication required"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bearer token lacks mobile:sync"}},"security":[{"bearerAuth":[]},{"nativeClientMarker":[],"sessionCookie":[]}],"summary":"List mobile offline queue operations","x-rms-auth-modes":["api_token","native_session"],"x-rms-cache-control":"private, no-store","x-rms-required-token-scope":"mobile:sync"},"post":{"operationId":"upsertMobileOfflineQueueOperation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfflineQueueUpsertRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfflineQueueUpsertResponse"}}},"description":"Offline queue operation created, updated, or idempotently replayed"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Client operation UUID is invalid and was not normalized"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Authentication required"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bearer token lacks mobile:sync"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Operation UUID identity or evidence pack limit conflict"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Offline payload exceeds the configured byte limit"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Offline payload exceeds the configured nesting-depth limit"},"503":{"content":{"application/problem+json":{"examples":{"uuid_generation_exhausted":{"value":{"details":{"max_generation_attempts":8,"retryable":true},"error":"Unable to allocate a unique operation UUID after bounded retries.","error_code":"offline_operation_uuid_generation_failed","ok":false,"problem":{"detail":"Unable to allocate a unique operation UUID after bounded retries.","details":{"max_generation_attempts":8,"retryable":true},"error_code":"offline_operation_uuid_generation_failed","instance":"/api/v1/mobile/offline-queue","request_id":"request-example","status":503,"title":"Service Unavailable","type":"/api/v1/problems/offline_operation_uuid_generation_failed"}}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Server-generated operation UUID allocation exhausted eight bounded collision retries; retry as a new request"}},"security":[{"bearerAuth":[]},{"nativeClientMarker":[],"sessionCookie":[]}],"summary":"Create or upsert an offline operation, including ordered evidence packs of up to six photos","x-rms-auth-modes":["api_token","native_session"],"x-rms-required-token-scope":"mobile:sync"}},"/api/v1/mobile/offline-queue/{operation_uuid}/action":{"post":{"operationId":"mobileOfflineQueueAction","parameters":[{"in":"path","name":"operation_uuid","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Offline queue action applied"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Operation not found"}},"summary":"Apply action to a mobile offline queue operation"}},"/api/v1/mobile/push-inbox":{"get":{"operationId":"mobilePushInbox","parameters":[{"in":"query","name":"limit","schema":{"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"cursor","schema":{"minimum":0,"type":"integer"}},{"in":"query","name":"representation","schema":{"default":"full","enum":["full","native_summary"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"examples":{"native_unread_event":{"value":{"data":[{"acked":false,"body":"An item is due soon.","category":"due_soon","deep_link_path":"/app/open?loan_id=123&view=timeline","event_id":77,"read":false,"severity":"warning","title":"Due Soon"}],"meta":{"cursor":null,"generated_at":"2026-08-06T12:00:00+00:00","limit":25,"next_cursor":null,"token_id":1},"ok":true,"summary":{"row_count":1,"unacked_count":1,"unread_count":1}}}},"schema":{"$ref":"#/components/schemas/MobilePushInboxListResponse"}}},"description":"Private read-only push inbox feed","headers":{"Cache-Control":{"schema":{"enum":["private, no-store"],"type":"string"}},"Vary":{"example":"Authorization, Cookie","schema":{"type":"string"}}}},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bearer authentication failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Token lacks notifications:read or profile:read"}},"summary":"List mobile push inbox events","x-rms-cache-control":"private, no-store","x-rms-native-privacy":"native_summary omits event_key, arbitrary payload, and exact read/ack/created timestamps before transport.","x-rms-read-side-effects":"none; listing does not seed, create, mark read, acknowledge, deliver, or contact a push provider","x-rms-required-scopes-any":["notifications:read","profile:read"]}},"/api/v1/mobile/push-inbox/{event_id}/ack":{"post":{"operationId":"mobilePushInboxAck","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"representation","schema":{"default":"full","enum":["full","native_summary"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"examples":{"native_acknowledged":{"value":{"data":{"acked":true,"body":"An item is due soon.","category":"due_soon","deep_link_path":"/app/open?loan_id=123&view=timeline","event_id":77,"read":true,"severity":"warning","title":"Due Soon"},"meta":{"generated_at":"2026-08-06T12:00:00+00:00","token_id":1},"ok":true}}},"schema":{"$ref":"#/components/schemas/MobilePushInboxMutationResponse"}}},"description":"Private inbox event acknowledged state","headers":{"Cache-Control":{"schema":{"enum":["private, no-store"],"type":"string"}},"Deprecation":{"description":"true only when legacy profile:read authorized the mutation","schema":{"enum":["true"],"type":"string"}},"Vary":{"example":"Authorization, Cookie","schema":{"type":"string"}},"Warning":{"description":"Migration guidance when legacy profile:read authorized the mutation","schema":{"type":"string"}}}},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bearer authentication failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Token lacks notifications:write or profile:read"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Owner-scoped inbox event not found"}},"security":[{"bearerAuth":["notifications:write"]},{"bearerAuth":["profile:read"]}],"summary":"Acknowledge mobile push inbox event","x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":"none; updates only the authenticated user's private inbox read and acknowledgement timestamps","x-rms-native-privacy":"representation=native_summary returns no event key, payload, or exact timestamps.","x-rms-required-scopes-any":["notifications:write","profile:read"],"x-rms-retry-policy":"Idempotent state transition; exact retries preserve the first read/ack timestamps and return current state.","x-rms-scope-migration":{"enforcement_date":null,"guidance":"New clients should request notifications:write. Legacy profile:read remains accepted without a scheduled enforcement date and successful legacy calls receive Deprecation and Warning headers.","legacy_scope":"profile:read","legacy_scope_accepted":true,"phase":"dual_scope","preferred_scope":"notifications:write"}}},"/api/v1/mobile/push-inbox/{event_id}/read":{"post":{"operationId":"mobilePushInboxMarkRead","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"representation","schema":{"default":"full","enum":["full","native_summary"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"examples":{"native_marked_read":{"value":{"data":{"acked":false,"body":"An item is due soon.","category":"due_soon","deep_link_path":"/app/open?loan_id=123&view=timeline","event_id":77,"read":true,"severity":"warning","title":"Due Soon"},"meta":{"generated_at":"2026-08-06T12:00:00+00:00","token_id":1},"ok":true}}},"schema":{"$ref":"#/components/schemas/MobilePushInboxMutationResponse"}}},"description":"Private inbox event read state","headers":{"Cache-Control":{"schema":{"enum":["private, no-store"],"type":"string"}},"Deprecation":{"description":"true only when legacy profile:read authorized the mutation","schema":{"enum":["true"],"type":"string"}},"Vary":{"example":"Authorization, Cookie","schema":{"type":"string"}},"Warning":{"description":"Migration guidance when legacy profile:read authorized the mutation","schema":{"type":"string"}}}},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bearer authentication failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Token lacks notifications:write or profile:read"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Owner-scoped inbox event not found"}},"security":[{"bearerAuth":["notifications:write"]},{"bearerAuth":["profile:read"]}],"summary":"Mark mobile push inbox event as read","x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":"none; updates only the authenticated user's private inbox read timestamp","x-rms-native-privacy":"representation=native_summary returns no event key, payload, or exact timestamps.","x-rms-required-scopes-any":["notifications:write","profile:read"],"x-rms-retry-policy":"Idempotent state transition; exact retries preserve the first read timestamp and return current state.","x-rms-scope-migration":{"enforcement_date":null,"guidance":"New clients should request notifications:write. Legacy profile:read remains accepted without a scheduled enforcement date and successful legacy calls receive Deprecation and Warning headers.","legacy_scope":"profile:read","legacy_scope_accepted":true,"phase":"dual_scope","preferred_scope":"notifications:write"}}},"/api/v1/mutations/bulk":{"post":{"operationId":"bulkMutations","responses":{"200":{"description":"Mutation results"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Idempotency conflict"}},"summary":"Execute idempotent bulk mutations"}},"/api/v1/native/account-hub":{"get":{"operationId":"getNativeAccountHubBootstrap","parameters":[{"in":"query","name":"per_section","schema":{"default":200,"maximum":200,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeAccountHubBootstrapResponse"}}},"description":"Independently available bounded native Home and Inventory sections"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Bearer token has neither loans:read nor inventory:read"}},"summary":"Bootstrap privacy-minimized native Home and Inventory sections","x-rms-cache-control":"private, no-store","x-rms-privacy":"Returns only the native-summary loan and inventory fields. Participant contacts, serials, notes, accessories, valuation, location, and marketplace detail are excluded.","x-rms-required-scopes":["loans:read","inventory:read"],"x-rms-scope-policy":"At least one listed scope is required. Each section is independently available only when its exact scope is granted."}},"/api/v1/native/auth/exchange":{"post":{"operationId":"redeemNativeAuthenticationExchange","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"binding":{"maxLength":128,"minLength":20,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"claim":{"pattern":"^rmsnx_[A-Za-z0-9_-]{20,96}$","type":"string"},"client":{"enum":["ios"],"type":"string"},"purpose":{"enum":["ios_native_sign_in"],"type":"string"}},"required":["claim","binding","purpose","client"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"examples":{"credential_issued":{"summary":"Store the bearer value directly in device-protected storage; never log it.","value":{"data":{"credential":{"bearer_token":"rms_example_store_directly_do_not_log","generation":0},"local_account_identifier":"native_0123456789abcdef0123456789abcdef"},"meta":{"client":"ios","expires_at":"2026-09-05T12:00:00+00:00","purpose":"ios_native_sign_in"},"ok":true}}},"schema":{"$ref":"#/components/schemas/NativeAuthExchangeResponse"}}},"description":"One protected credential and opaque local account namespace; claim consumed"},"400":{"content":{"application/json":{"examples":{"invalid_exchange":{"value":{"error":"Native sign-in exchange is invalid.","error_code":"native_auth_exchange_invalid","ok":false}}},"schema":{"$ref":"#/components/schemas/NativeAuthErrorResponse"}}},"description":"Malformed or wrong-purpose/client exchange"},"401":{"content":{"application/json":{"examples":{"rejected_exchange":{"value":{"error":"Native sign-in exchange is unavailable or expired.","error_code":"native_auth_exchange_rejected","ok":false}}},"schema":{"$ref":"#/components/schemas/NativeAuthErrorResponse"}}},"description":"Claim missing, expired, consumed, or binding-mismatched"}},"security":[],"summary":"Redeem one short-lived owned-WebView native sign-in claim","x-rms-auth-mode":"single_use_native_exchange_claim","x-rms-cache-control":"private, no-store","x-rms-privacy":"The browser receives only a random short-lived claim. Bearer material is returned solely by this native transport response and must be written directly to device-only protected storage.","x-rms-replay-policy":"The claim is bound to purpose, iOS client, and exact opaque native continuation binding; one successful redemption consumes it."}},"/api/v1/native/auth/revoke":{"post":{"operationId":"revokeCurrentNativeToken","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"client":{"enum":["ios"],"type":"string"},"purpose":{"enum":["ios_native_sign_in"],"type":"string"}},"required":["purpose","client"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"examples":{"already_inactive":{"value":{"data":{"disposition":"already_inactive","state":"inactive"},"ok":true}},"revoked":{"value":{"data":{"disposition":"revoked","state":"inactive"},"ok":true}}},"schema":{"$ref":"#/components/schemas/NativeAuthRevokeResponse"}}},"description":"Exact current token is inactive; repeated requests remain successful"},"400":{"content":{"application/json":{"examples":{"invalid_revoke":{"value":{"error":"Native sign-out request is invalid.","error_code":"native_auth_revoke_invalid","ok":false}}},"schema":{"$ref":"#/components/schemas/NativeAuthErrorResponse"}}},"description":"Closed native lifecycle contract is invalid"},"401":{"content":{"application/json":{"examples":{"invalid_token":{"value":{"error":"Bearer authentication failed.","error_code":"invalid_token","ok":false}},"missing_token":{"value":{"error":"Bearer authentication failed.","error_code":"missing_token","ok":false}}},"schema":{"$ref":"#/components/schemas/NativeAuthErrorResponse"}}},"description":"Bearer token is missing, malformed, or unknown"}},"summary":"Revoke exactly the native bearer token used for this request","x-rms-authentication":"The current bearer token is the sole revocation target. Active, expired, and already-revoked known tokens are accepted idempotently.","x-rms-cache-control":"private, no-store","x-rms-privacy":"Returns only active/inactive lifecycle state; no token ID, prefix, hash, account identifier, or bearer value is returned.","x-rms-required-scope":null,"x-rms-retry-policy":"Idempotent for the same bearer token. Unknown or malformed bearer values remain unauthorized."}},"/api/v1/native/connections":{"get":{"operationId":"listNativeConnections","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeConnectionsResponse"}}},"description":"Native connections list"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Bearer token lacks connections:read"}},"summary":"List bounded privacy-minimized outgoing connections","x-rms-delivery-side-effects":"none","x-rms-privacy-boundary":"Returns at most 100 accepted or pending outgoing rows with display labels and opaque IDs. Contact fields, invite tokens, timestamps, and inbound relationships are omitted.","x-rms-required-scope":"connections:read"}},"/api/v1/native/connections/invites":{"post":{"operationId":"createNativeConnectionInvite","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$","type":"string"}},{"description":"Disabled-by-default development-only no-delivery mode restricted to consumed native iOS claims and exact disposable .invalid identities.","in":"header","name":"X-RMS-Acceptance-Mode","required":false,"schema":{"enum":["native-connection-invite-no-delivery-v1"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeConnectionInviteRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeConnectionInviteResponse"}}},"description":"Invitation and closed delivery receipt persisted, or exact replay"},"400":{"description":"Invalid or self invitation"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Bearer token lacks connections:write or development acceptance was denied"},"409":{"description":"Already connected, pending invitation, or key mismatch"},"415":{"description":"Content-Type must be application/json"},"429":{"description":"Bounded invite rate exceeded"}},"summary":"Send one explicitly reviewed connection invitation","x-rms-delivery-side-effects":"one_reviewed_invite_email; an explicitly enabled development-only synthetic acceptance mode suppresses delivery and persists that fact","x-rms-privacy-boundary":"The request accepts one reviewed email but the response returns only a display label and opaque connection identifiers.","x-rms-required-scope":"connections:write","x-rms-retry-policy":"Requires Idempotency-Key. The invitation and a state_committed receipt are atomic. Exact retries replay the stored receipt and never redeliver; state_committed means delivery outcome is not durably known, completed is final, and suppressed is development acceptance only."}},"/api/v1/native/loan-start":{"get":{"operationId":"getNativeLoanStartOptions","parameters":[{"in":"query","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeLoanStartResponse"}}},"description":"Native loan-start options"},"400":{"description":"Invalid item ID"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Bearer token lacks loans:write"},"404":{"description":"Owned item not found"}},"summary":"Load privacy-minimized native loan-start options","x-rms-delivery-side-effects":"none","x-rms-empty-borrower-next-step":"When no eligible connected borrower exists, borrower_setup.state is invite_required and borrower_setup.invite_path names the separate reviewed invitation operation. Reading loan-start never sends that invitation or creates a loan.","x-rms-privacy-boundary":"Returns only an owned item label and connected borrower IDs/display names. Email, phone, address, and unconnected accounts are omitted.","x-rms-required-scope":"loans:write"}},"/api/v1/native/loans":{"post":{"operationId":"createNativeLoan","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeLoanCreateRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeLoanCreateResponse"}}},"description":"Loan created or exact idempotent replay"},"400":{"description":"Invalid request or idempotency key"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Bearer token lacks loans:write"},"404":{"description":"Owned item not found"},"409":{"description":"Item/borrower ineligible or idempotency-key payload mismatch"},"415":{"description":"Content-Type must be application/json"}},"summary":"Create one reviewed loan to a connected borrower","x-rms-delivery-side-effects":"loan_event_only","x-rms-privacy-boundary":"Accepts only an owned eligible item and an eligible connected borrower ID. Responses omit all contact fields.","x-rms-required-scope":"loans:write"}},"/api/v1/native/loans/{loan_id}/conversation":{"get":{"operationId":"getNativeLoanConversation","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"per_page","schema":{"default":30,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque participant-and-loan-bound cursor returned by the previous page.","in":"query","name":"cursor","schema":{"maxLength":2048,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeConversationResponse"}}},"description":"Newest or earlier native conversation page without read-state mutation"},"400":{"description":"Malformed or tampered history cursor; full refresh required"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Scope, participant relationship, or cursor binding denied"},"404":{"description":"Loan not found"},"410":{"description":"History cursor expired; full refresh required"}},"summary":"Read one bounded privacy-minimized native loan conversation","x-rms-cursor-boundary":"Signed opaque cursor is bound to the authenticated participant and exact loan, expires after a bounded server window, and selects only older visible messages. Refresh after 400, 403, or 410.","x-rms-delivery-side-effects":"none","x-rms-privacy-boundary":"Returns at most 50 visible messages with role, relative order, and bounded body only. Contact fields, exact timestamps, presence, receipts, attachment paths, and moderation detail are omitted.","x-rms-required-scope":"messages:read"},"post":{"operationId":"sendNativeLoanConversationMessage","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeConversationSendRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeConversationSendResponse"}}},"description":"Message and optional private evidence link persisted; configured delivery attempted, or exact replay"},"400":{"description":"Invalid text, private evidence ID, or idempotency key"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Scope, participant, or private evidence relationship denied"},"404":{"description":"Loan or private evidence not found"},"409":{"description":"Idempotency mismatch or private evidence unavailable/already attached"},"415":{"description":"Content-Type must be application/json"}},"summary":"Send one explicitly reviewed participant-visible message","x-rms-delivery-side-effects":"reviewed_participant_notifications","x-rms-privacy-boundary":"Accepts bounded text plus at most one already-confirmed private status photo owned by the sender for this exact loan. Paths, contact data, visibility overrides, presence, typing, translation, pinning, and moderation remain excluded.","x-rms-required-scope":"messages:write","x-rms-retry-policy":"Requires Idempotency-Key. Exact retries replay the stored receipt and never duplicate the message or delivery."}},"/api/v1/native/loans/{loan_id}/conversation/messages/{message_id}/evidence/thumbnail":{"get":{"operationId":"getNativeLoanConversationEvidenceThumbnail","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"path","name":"message_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"image/jpeg":{"schema":{"format":"binary","type":"string"}}},"description":"Private JPEG thumbnail","headers":{"Cache-Control":{"schema":{"enum":["private, no-store"],"type":"string"}},"X-RMS-Evidence-Protected":{"schema":{"enum":["native-conversation-thumbnail"],"type":"string"}}}},"401":{"description":"Bearer authentication failed"},"403":{"description":"Scope or participant relationship denied"},"404":{"description":"Loan, message, evidence, or protected thumbnail not found"}},"summary":"Read one participant-authorized native conversation evidence thumbnail","x-rms-delivery-side-effects":"none","x-rms-privacy-boundary":"Returns only the protected thumbnail for a visible message on the exact participant loan. It never returns a storage path or reusable signed URL.","x-rms-required-scope":"messages:read"}},"/api/v1/native/loans/{loan_id}/conversation/read":{"post":{"operationId":"markNativeLoanConversationRead","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeConversationReadRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeConversationReadResponse"}}},"description":"Read state advanced, unchanged, or exact replay"},"400":{"description":"Invalid message ID or idempotency key"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Scope or participant relationship denied"},"404":{"description":"Loan or visible message not found"},"409":{"description":"Idempotency key reused for different work"},"415":{"description":"Content-Type must be application/json"}},"summary":"Explicitly mark one visible native conversation position read","x-rms-delivery-side-effects":"none","x-rms-privacy-boundary":"Advances only the authenticated participant's own read state through one visible message.","x-rms-required-scope":"messages:write","x-rms-retry-policy":"Requires Idempotency-Key. Exact retries replay the stored no-delivery receipt."}},"/api/v1/native/loans/{loan_id}/evidence-contribution-request":{"get":{"operationId":"getNativeLoanEvidenceContributionRequest","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeEvidenceContributionRequestResponse"}}},"description":"Exact private contribution-request state"},"401":{"description":"Bearer or signed-in session authentication failed"},"403":{"description":"Scope or native same-origin boundary denied"},"404":{"description":"Participant-scoped loan not found"}},"security":[{"bearerAuth":[]},{"nativeClientMarker":[],"sessionCookie":[]}],"summary":"Read one exact loan's consent-based borrower evidence request state","x-rms-auth-modes":["api_token","native_session"],"x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":"none","x-rms-native-session-boundary":"Requires a live signed-in session, X-RMS-Native-Client: capacitor, and an exact same-origin Origin or Referer header.","x-rms-privacy-boundary":"Returns the exact participant loan and request lifecycle without contact fields, storage paths, media bytes, or reusable evidence references.","x-rms-required-scope":"loans:read or loans:write","x-rms-retry-policy":"Read-only. Expiry is represented as effective state without launching media or sending a notification."},"post":{"operationId":"updateNativeLoanEvidenceContributionRequest","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeEvidenceContributionRequestAction"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeEvidenceContributionRequestResponse"}}},"description":"Request lifecycle updated or exact replay"},"400":{"description":"Invalid closed action body, version, expiry, purpose, note, evidence ID, or idempotency key"},"401":{"description":"Bearer or signed-in session authentication failed"},"403":{"description":"Scope, actor role, or native same-origin boundary denied"},"404":{"description":"Participant loan, request, or matching private evidence not found"},"409":{"description":"Stale, duplicate-active, cancellation, replacement, acceptance, loan-state, or idempotency conflict"},"415":{"description":"Content-Type must be application/json"}},"security":[{"bearerAuth":[]},{"nativeClientMarker":[],"sessionCookie":[]}],"summary":"Create, replace, renew, cancel, decide, fulfill, or acknowledge one reviewed in-app evidence request","x-rms-auth-modes":["api_token","native_session"],"x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":"none","x-rms-native-session-boundary":"Requires a live signed-in session, X-RMS-Native-Client: capacitor, an exact same-origin Origin or Referer header, and a replay key bound to the current AuthSession row.","x-rms-privacy-boundary":"Creates, deliberately replaces, or renews one owner/lender request while preserving terminal request and borrower-consent history, or records one borrower decision. Renewal always inserts a fresh request and never extends expired consent. Fulfillment accepts only new borrower-owned private status or return evidence on the exact loan and returns no storage locator.","x-rms-required-scope":"loans:write","x-rms-retry-policy":"Requires Idempotency-Key and a fresh request_version. Exact retries replay; stale, duplicate-active, wrong-role, invalid cancellation/replacement/renewal, or mismatched evidence state fails closed. Replacement and renewal create fresh consent requests. Media capture is always a separate explicit borrower action."}},"/api/v1/native/loans/{loan_id}/evidence-contribution-request/thumbnail":{"get":{"operationId":"getNativeLoanEvidenceContributionRequestThumbnail","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"header","name":"X-RMS-Evidence-Position","required":true,"schema":{"maximum":3,"minimum":0,"type":"integer"}},{"in":"header","name":"X-RMS-Evidence-Reference","required":true,"schema":{"maxLength":2048,"minLength":16,"type":"string"}}],"responses":{"200":{"content":{"image/jpeg":{"schema":{"format":"binary","type":"string"}}},"description":"One exact protected JPEG thumbnail","headers":{"Cache-Control":{"schema":{"enum":["private, no-store"],"type":"string"}},"X-RMS-Evidence-Protected":{"schema":{"enum":["native-evidence-request-thumbnail"],"type":"string"}}}},"401":{"description":"Bearer or signed-in session authentication failed"},"403":{"description":"Scope or native same-origin boundary denied"},"404":{"description":"Exact requester, request, position, reference, or protected thumbnail not found"}},"security":[{"bearerAuth":[]},{"nativeClientMarker":[],"sessionCookie":[]}],"summary":"Deliberately load one exact contributed evidence thumbnail","x-rms-auth-modes":["api_token","native_session"],"x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":"none","x-rms-prefetch-policy":"Call only after the user chooses to load the selected contribution. Load one position at a time and purge decoded bytes on every lifecycle exit.","x-rms-privacy-boundary":"Requester-only, exact current fulfilled request, exact ordered position, and short-lived user-bound reference supplied in headers. No path, photo ID, contact field, or reusable URL is returned.","x-rms-required-scope":"loans:read or loans:write"}},"/api/v1/native/loans/{loan_id}/handoff":{"get":{"operationId":"getNativeLoanHandoff","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeLoanHandoffReadResponse"}}},"description":"Exact private read-only handoff state"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Bearer token lacks loans:read"},"404":{"description":"Participant-scoped loan not found"}},"summary":"Read one minimized two-party handoff checklist","x-rms-cache-control":"private, no-store","x-rms-database-writes":"none","x-rms-delivery-side-effects":"none","x-rms-privacy-boundary":"Returns checklist labels and boolean participant progress only. Names, contacts, notes, coordinates, distances, timestamps, token identifiers, and delivery state are omitted.","x-rms-required-scope":"loans:read"},"post":{"operationId":"confirmNativeLoanHandoff","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeLoanHandoffConfirmRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeLoanHandoffConfirmResponse"}}},"description":"Participant checklist confirmed or exact idempotent replay"},"400":{"description":"Invalid body, incomplete checklist, explicit confirmation, or idempotency key"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Bearer token lacks loans:write"},"404":{"description":"Participant-scoped loan not found"},"409":{"description":"Stale state, closed or already-confirmed loan, advanced web requirement, or idempotency mismatch"},"415":{"description":"Content-Type must be application/json"}},"summary":"Confirm one participant's complete native handoff checklist","x-rms-cache-control":"private, no-store","x-rms-database-writes":"participant_checklist_and_loan_events_only","x-rms-delivery-side-effects":"none","x-rms-privacy-boundary":"Accepts only the four fixed checklist keys, explicit confirmation, and an opaque state version. It returns no names, contacts, notes, coordinates, distances, or timestamps.","x-rms-required-scope":"loans:write","x-rms-retry-policy":"Requires Idempotency-Key. Exact retries replay the original receipt without another checklist or event write."}},"/api/v1/native/loans/{loan_id}/return":{"get":{"operationId":"getNativeLoanReturn","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeLoanReturnResponse"}}},"description":"Native return state"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Scope or relationship denied"},"404":{"description":"Loan not found"}},"summary":"Read one privacy-minimized native return state","x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":"none","x-rms-privacy-boundary":"Returns only the item label, actor role, fixed requirements, state, and safe action. Contact and custody-history fields are omitted.","x-rms-private-response-headers":{"Cache-Control":"private, no-store","Pragma":"no-cache","Vary":"Authorization, Cookie"},"x-rms-required-scope":"loans:write"},"post":{"operationId":"updateNativeLoanReturn","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$","type":"string"}},{"description":"Canonical lowercase UUID for account-scoped borrower request replay across replacement credentials. Not accepted for owner confirmation.","in":"header","name":"X-RMS-Return-Operation","required":false,"schema":{"format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"}},{"in":"header","name":"X-RMS-Acceptance-Mode","required":false,"schema":{"enum":["native-return-no-delivery-v1"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeLoanReturnRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeLoanReturnResponse"}}},"description":"Return state updated or exact replay"},"400":{"content":{"application/problem+json":{"examples":{"review_required":{"$ref":"#/components/examples/native_return_review_required"}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid or incomplete reviewed action"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Scope or relationship denied"},"404":{"description":"Loan not found"},"409":{"content":{"application/problem+json":{"examples":{"advanced_flow":{"$ref":"#/components/examples/native_return_advanced_required"},"idempotency_conflict":{"$ref":"#/components/examples/idempotency_key_conflict"},"state_conflict":{"$ref":"#/components/examples/native_return_state_conflict"}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"State conflict, advanced flow required, or idempotency mismatch"},"415":{"description":"Content-Type must be application/json"}},"summary":"Request or physically confirm one evidence-simple direct return","x-rms-acceptance-boundary":"X-RMS-Acceptance-Mode is inert by default and accepted only for native-exchange credentials on the closed disposable example.invalid graph in an explicitly configured development runtime. Any partial match fails before loan mutation.","x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":"reviewed_return_state_notifications; an explicitly enabled development-only synthetic acceptance mode suppresses all delivery and persists that fact in the idempotent receipt","x-rms-idempotency-receipt-retention-days":90,"x-rms-operation-receipt-retention-days":90,"x-rms-private-response-headers":{"Cache-Control":"private, no-store","Pragma":"no-cache","Vary":"Authorization, Cookie"},"x-rms-required-scope":"loans:write","x-rms-retry-policy":"Requires Idempotency-Key. Borrower clients should also send one stable X-RMS-Return-Operation UUID for account-scoped replay across replacement credentials. Exact retries within the published receipt windows replay the stored receipt and never redeliver notifications. After either window expires, refresh the return state before deciding whether new work is needed; never blindly resend an old mutation."}},"/api/v1/native/loans/{loan_id}/summary":{"get":{"operationId":"getNativeLoanSummary","parameters":[{"in":"path","name":"loan_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeLoanSummaryResponse"}}},"description":"Exact native loan summary"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Scope or relationship denied"},"404":{"description":"Loan not found"}},"summary":"Read one exact privacy-minimized native loan summary","x-rms-delivery-side-effects":"none","x-rms-privacy-boundary":"Exact participant-only loan state; contact, note, location, condition, and custody-history fields are omitted.","x-rms-required-scope":"loans:read or loans:write"}},"/api/v1/native/web-session/continuations":{"post":{"operationId":"createNativeWebSessionContinuation","parameters":[{"in":"header","name":"X-RMS-Native-Client","required":true,"schema":{"enum":["ios"],"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"binding":{"maxLength":128,"minLength":32,"pattern":"^[A-Za-z0-9_-]+$","type":"string"},"destination":{"oneOf":[{"enum":["/marketplace","/marketplace/requests?scope=incoming&status=pending","/marketplace/requests?scope=outgoing&status=pending"]},{"pattern":"^/marketplace/items/[1-9][0-9]*$"},{"pattern":"^/loans/[1-9][0-9]*/return$"}],"type":"string"}},"required":["binding","destination"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeWebSessionContinuationResponse"}}},"description":"Opaque 90-second continuation path containing no bearer, account, or destination detail"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeWebSessionErrorResponse"}}},"description":"Malformed binding or destination"},"401":{"description":"Bearer authentication failed"},"403":{"description":"Token lacks the internal native:web-session scope or native client marker is invalid"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeWebSessionErrorResponse"}}},"description":"Collision-safe continuation allocation failed"}},"security":[{"bearerAuth":["native:web-session"]}],"summary":"Create one bearer-authenticated native-to-WebView session continuation","x-rms-cache-control":"private, no-store","x-rms-privacy":"The bearer stays in native protected transport. The response contains only a short-lived opaque path; the destination remains server-side and the non-authenticating browser binding is supplied separately as a path-scoped cookie.","x-rms-replay-policy":"Only the newest continuation for the exact user remains active. Resolution requires both the single-use token and its independent browser-binding cookie, then consumes the row.","x-rms-required-scope":"native:web-session","x-rms-session-lifecycle":"The created web AuthSession is tied to the exact native API token and is revoked when that token is revoked, replaced, expired, or loses its internal scope.","x-rms-side-effects":"Creates short-lived continuation and web AuthSession state only; no item, loan, request, contact, notification, provider, or delivery mutation."}},"/api/v1/ops/correlation-traces/{trace_id}":{"get":{"operationId":"opsCorrelationTraceLookup","parameters":[{"in":"path","name":"trace_id","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"maximum":1000,"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Ops correlation trace lookup payload"}},"summary":"Lookup linked cross-lane artifacts by ops correlation trace ID"}},"/api/v1/ops/correlation-traces/{trace_id}/bundle":{"get":{"operationId":"opsCorrelationTraceBundle","parameters":[{"in":"path","name":"trace_id","required":true,"schema":{"type":"string"}},{"in":"query","name":"days","schema":{"maximum":3650,"minimum":7,"type":"integer"}}],"responses":{"200":{"description":"Ops correlation trace bundle ZIP"}},"summary":"Download cross-lane export bundle for an ops correlation trace ID"}},"/api/v1/ops/correlation-traces/{trace_id}/bundle/jobs":{"post":{"operationId":"opsCorrelationTraceBundleAsyncEnqueue","responses":{"200":{"description":"Ops correlation trace async bundle job payload"}},"summary":"Enqueue async cross-lane bundle export job for a correlation trace"}},"/api/v1/ops/correlation-traces/{trace_id}/bundle/jobs/{job_token}":{"get":{"operationId":"opsCorrelationTraceBundleAsyncStatus","responses":{"200":{"description":"Ops correlation trace async bundle job status payload"}},"summary":"Get async cross-lane bundle job status"}},"/api/v1/ops/correlation-traces/{trace_id}/bundle/jobs/{job_token}/download":{"get":{"operationId":"opsCorrelationTraceBundleAsyncDownload","responses":{"200":{"description":"Ops correlation trace async bundle ZIP"}},"summary":"Download async cross-lane bundle job artifact"}},"/api/v1/ops/correlation-traces/{trace_id}/graph":{"get":{"operationId":"opsCorrelationTraceGraph","parameters":[{"in":"path","name":"trace_id","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"maximum":1000,"minimum":1,"type":"integer"}},{"in":"query","name":"format","schema":{"enum":["json","graphml","svg"],"type":"string"}},{"in":"query","name":"lanes","schema":{"type":"string"}}],"responses":{"200":{"description":"Ops correlation trace lineage graph payload"}},"summary":"Return lineage DAG across referral/timeline/drift/retry artifacts for a correlation trace"}},"/api/v1/ops/cross-surface-digest":{"get":{"operationId":"opsCrossSurfaceDigest","responses":{"200":{"description":"Cross-surface operations digest payload"}},"summary":"Cross-surface operations digest (baseline/SLA/retry/translation/policy)"}},"/api/v1/ops/cross-surface-digest/subscriptions":{"delete":{"operationId":"deleteOpsCrossSurfaceDigestSubscription","responses":{"200":{"description":"Digest subscription delete payload"}},"summary":"Delete a cross-surface digest alert subscription"},"get":{"operationId":"opsCrossSurfaceDigestSubscriptions","responses":{"200":{"description":"Digest subscription payload"}},"summary":"List cross-surface digest alert subscriptions"},"post":{"operationId":"upsertOpsCrossSurfaceDigestSubscription","responses":{"200":{"description":"Digest subscription upsert payload"}},"summary":"Create or update a cross-surface digest alert subscription"}},"/api/v1/ops/cross-surface-digest/subscriptions/test-send":{"post":{"operationId":"opsCrossSurfaceDigestSubscriptionTestSend","responses":{"200":{"description":"Digest subscription test-send payload"}},"summary":"Run cross-surface digest subscription test-send simulation"}},"/api/v1/ops/error-fingerprints":{"get":{"operationId":"listOpsErrorFingerprints","responses":{"200":{"description":"Fingerprint feed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Admin required"}},"summary":"List grouped error fingerprints"}},"/api/v1/ops/error-fingerprints/suppressions":{"get":{"operationId":"listErrorFingerprintSuppressions","responses":{"200":{"description":"Suppression rows"}},"summary":"List suppression rules"},"post":{"operationId":"upsertErrorFingerprintSuppression","responses":{"200":{"description":"Suppression rule persisted"}},"summary":"Create/update suppression rule"}},"/api/v1/ops/external-baseline-retention-scheduler":{"get":{"operationId":"opsExternalBaselineRetentionScheduler","responses":{"200":{"description":"External baseline retention scheduler payload"}},"summary":"Get external baseline retention scheduler configuration and run history"},"post":{"operationId":"upsertOrRunOpsExternalBaselineRetentionScheduler","responses":{"200":{"description":"External baseline retention scheduler result payload"}},"summary":"Upsert or run external baseline retention scheduler"}},"/api/v1/ops/unlock-queue/staffing-recommender":{"get":{"operationId":"unlockQueueStaffingRecommender","responses":{"200":{"description":"Staffing recommendation payload"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Admin required"}},"summary":"Unlock queue staffing recommendation"}},"/api/v1/rate-limit/introspect":{"get":{"operationId":"rateLimitIntrospect","responses":{"200":{"description":"Rate-limit payload"}},"summary":"Inspect current token rate-limit usage"}},"/api/v1/search/universal":{"get":{"operationId":"universalSearch","responses":{"200":{"description":"Search results"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"}},"summary":"Unified cross-object search"}},"/api/v1/sync/checkpoint/ack":{"post":{"operationId":"ackSyncCheckpoint","responses":{"200":{"description":"Checkpoint acknowledged"}},"summary":"Acknowledge sync checkpoint"}},"/api/v1/sync/checkpoint/create":{"post":{"operationId":"createSyncCheckpoint","responses":{"200":{"description":"Checkpoint created"}},"summary":"Create sync checkpoint"}},"/api/v1/sync/checkpoint/diff":{"post":{"operationId":"diffSyncCheckpoint","responses":{"200":{"description":"Checkpoint diff"}},"summary":"Diff from checkpoint"}},"/api/v1/uploads/signed-url":{"post":{"operationId":"issueSignedUploadUrl","responses":{"200":{"description":"Upload URL contract"}},"summary":"Issue signed upload URL contracts"}},"/api/v1/users/{user_id}/loan-timeline":{"get":{"operationId":"apiUserLoanTimeline","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"query","name":"format","schema":{"enum":["json","csv","ics","md","leaderboard_csv","leaderboard_md"],"type":"string"}}],"responses":{"200":{"description":"Timeline payload"}},"summary":"User loan timeline (token)"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers":{"delete":{"operationId":"deleteTimelineChronicWaiver","responses":{"200":{"description":"Timeline chronic waiver delete payload"}},"summary":"Delete chronic tardiness waiver"},"get":{"operationId":"timelineChronicWaivers","responses":{"200":{"description":"Timeline chronic waiver payload"}},"summary":"List chronic tardiness waiver receipts"},"post":{"operationId":"upsertTimelineChronicWaiver","responses":{"200":{"description":"Timeline chronic waiver upsert payload"}},"summary":"Upsert chronic tardiness waiver"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-actions":{"get":{"operationId":"timelineChronicWaiverNotifierActionHistory","responses":{"200":{"description":"Timeline waiver notifier history payload"}},"summary":"List timeline waiver notifier action history"},"post":{"operationId":"timelineChronicWaiverNotifierAction","responses":{"200":{"description":"Timeline waiver notifier action payload"}},"summary":"Apply timeline waiver notifier action (send_now|mute|ack)"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-actions/escalation-simulator":{"get":{"operationId":"timelineChronicWaiverNotifierEscalationSimulator","responses":{"200":{"description":"Timeline waiver notifier escalation simulator payload"}},"summary":"Preview notifier escalation outcomes with unavailable channels and simulated deferral counts"},"post":{"operationId":"timelineChronicWaiverNotifierEscalationSimulatorPost","responses":{"200":{"description":"Timeline waiver notifier escalation simulator payload"}},"summary":"Run notifier escalation simulation with request payload overrides"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-actions/test-send":{"get":{"operationId":"timelineChronicWaiverNotifierTestSendPreview","responses":{"200":{"description":"Timeline waiver notifier test-send preview payload"}},"summary":"Preview timeline waiver notifier test-send recipients and reasons"},"post":{"operationId":"timelineChronicWaiverNotifierTestSend","responses":{"200":{"description":"Timeline waiver notifier test-send payload"}},"summary":"Run timeline waiver notifier test-send simulation"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-digest-preview":{"get":{"operationId":"timelineChronicWaiverNotifierDigestPreview","responses":{"200":{"description":"Timeline waiver notifier digest preview payload"}},"summary":"Preview timeline waiver notifier digest artifact (dedupe keys + manifest)"},"post":{"operationId":"timelineChronicWaiverNotifierDigestPreviewPost","responses":{"200":{"description":"Timeline waiver notifier digest preview payload"}},"summary":"Build timeline waiver notifier digest artifact using request payload"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-digest-preview/compare":{"get":{"operationId":"timelineChronicWaiverNotifierDigestPreviewCompare","parameters":[{"in":"query","name":"format","schema":{"enum":["json","csv","md","bundle"],"type":"string"}}],"responses":{"200":{"description":"Timeline waiver notifier digest preview compare payload"}},"summary":"Compare current timeline waiver notifier digest preview against previous bundle key"},"post":{"operationId":"timelineChronicWaiverNotifierDigestPreviewComparePost","parameters":[{"in":"query","name":"format","schema":{"enum":["json","csv","md","bundle"],"type":"string"}}],"responses":{"200":{"description":"Timeline waiver notifier digest preview compare payload"}},"summary":"Compare timeline waiver notifier digest preview using request payload"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-digest-preview/compare/baselines":{"get":{"operationId":"timelineChronicWaiverNotifierDigestCompareBaselines","responses":{"200":{"description":"Timeline waiver notifier digest compare baseline list payload"}},"summary":"List/pin timeline waiver notifier digest-compare baselines"},"post":{"operationId":"timelineChronicWaiverNotifierDigestCompareBaselinePin","responses":{"200":{"description":"Timeline waiver notifier digest compare baseline pin payload"}},"summary":"Pin timeline waiver notifier digest-compare baseline"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-digest-preview/compare/threshold-alerts":{"get":{"operationId":"timelineChronicWaiverNotifierDigestCompareThresholdAlerts","responses":{"200":{"description":"Timeline waiver notifier digest compare threshold alerts payload"}},"summary":"Preview digest-compare threshold alerts for timeline notifier"},"post":{"operationId":"timelineChronicWaiverNotifierDigestCompareThresholdAlertsPost","responses":{"200":{"description":"Timeline waiver notifier digest compare threshold alerts payload"}},"summary":"Evaluate digest-compare threshold alerts with payload overrides"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-digest-preview/compare/threshold-alerts/webhook-preview":{"get":{"operationId":"timelineChronicWaiverNotifierDigestCompareThresholdAlertsWebhookPreview","responses":{"200":{"description":"Timeline waiver digest-compare threshold alert webhook preview payload"}},"summary":"Preview timeline waiver digest-compare threshold alert webhook payload"},"post":{"operationId":"timelineChronicWaiverNotifierDigestCompareThresholdAlertsWebhookPreviewPost","responses":{"200":{"description":"Timeline waiver digest-compare threshold alert webhook preview payload"}},"summary":"Preview timeline waiver digest-compare threshold alert webhook payload (POST)"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-digest-preview/compare/verify-bundle":{"post":{"operationId":"timelineChronicWaiverNotifierDigestPreviewCompareVerifyBundle","responses":{"200":{"description":"Timeline waiver notifier digest compare bundle verification payload"}},"summary":"Verify timeline waiver notifier digest compare bundle signature"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-preferences":{"get":{"operationId":"timelineChronicWaiverNotifierPreferences","responses":{"200":{"description":"Timeline waiver notifier preferences payload"}},"summary":"Get timeline waiver notifier channel preferences"},"post":{"operationId":"setTimelineChronicWaiverNotifierPreferences","responses":{"200":{"description":"Timeline waiver notifier preferences update payload"}},"summary":"Set timeline waiver notifier channel preferences"}},"/api/v1/users/{user_id}/loan-timeline/chronic-waivers/notifier-preferences/holiday-policy":{"get":{"operationId":"timelineChronicWaiverNotifierHolidayPolicyExport","responses":{"200":{"description":"Timeline notifier holiday policy export payload"}},"summary":"Export timeline notifier holiday quiet-hours policy as JSON"},"post":{"operationId":"timelineChronicWaiverNotifierHolidayPolicyImport","responses":{"200":{"description":"Timeline notifier holiday policy import payload"}},"summary":"Import timeline notifier holiday quiet-hours policy (merge|replace)"}},"/api/v1/users/{user_id}/loan-timeline/leaderboard-fairness-profile":{"get":{"operationId":"timelineLeaderboardFairnessProfile","responses":{"200":{"description":"Timeline leaderboard fairness profile payload"}},"summary":"Get persisted timeline leaderboard fairness profile"},"post":{"operationId":"setTimelineLeaderboardFairnessProfile","responses":{"200":{"description":"Timeline leaderboard fairness profile update payload"}},"summary":"Set timeline leaderboard fairness profile override"}},"/api/v2/items/{item_id}/catalog":{"get":{"operationId":"getNativeItemCatalogV2","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Owner-scoped private response"},"401":{"description":"Missing or invalid authentication"},"403":{"description":"Required inventory scope is missing"},"404":{"description":"Item is not visible to this owner"}},"summary":"Read the exact private native item catalog","x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":false,"x-rms-required-scope":"inventory:read"},"patch":{"operationId":"updateNativeItemCatalogV2","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Owner-scoped private response"},"401":{"description":"Missing or invalid authentication"},"403":{"description":"Required inventory scope is missing"},"404":{"description":"Item is not visible to this owner"},"409":{"description":"Catalog version conflict"}},"summary":"Update reviewed optional native item catalog details","x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":false,"x-rms-required-scope":"inventory:write","x-rms-version-required":true}},"/api/v2/items/{item_id}/media":{"get":{"operationId":"listNativeItemMediaV2","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Owner-scoped private response"},"401":{"description":"Missing or invalid authentication"},"403":{"description":"Required inventory scope is missing"},"404":{"description":"Item is not visible to this owner"}},"summary":"List private item media separate from custody evidence","x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":false,"x-rms-required-scope":"inventory:read"},"post":{"operationId":"uploadNativeItemMediaV2","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Owner-scoped private response"},"201":{"description":"Reviewed media stored privately"},"401":{"description":"Missing or invalid authentication"},"403":{"description":"Required inventory scope is missing"},"404":{"description":"Item is not visible to this owner"},"428":{"description":"File review confirmation is required"}},"summary":"Upload reviewed private item media","x-rms-default-visibility":"private","x-rms-delivery-side-effects":false,"x-rms-required-scope":"inventory:write","x-rms-review-required":true}},"/api/v2/items/{item_id}/media/{media_id}/{variant}":{"get":{"operationId":"getNativeItemMediaAssetV2","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"path","name":"media_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"path","name":"variant","required":true,"schema":{"enum":["thumbnail","detail"],"type":"string"}}],"responses":{"200":{"description":"Owner-scoped private response"},"401":{"description":"Missing or invalid authentication"},"403":{"description":"Required inventory scope is missing"},"404":{"description":"Item is not visible to this owner"}},"summary":"Read a protected private item-media variant","x-rms-cache-control":"private, no-store","x-rms-required-scope":"inventory:read"}},"/api/v2/items/{item_id}/resources":{"get":{"operationId":"listNativeItemResourcesV2","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Owner-scoped private response"},"401":{"description":"Missing or invalid authentication"},"403":{"description":"Required inventory scope is missing"},"404":{"description":"Item is not visible to this owner"}},"summary":"List private item manuals and links","x-rms-cache-control":"private, no-store","x-rms-delivery-side-effects":false,"x-rms-required-scope":"inventory:read"},"post":{"operationId":"createNativeItemResourceV2","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Owner-scoped private response"},"201":{"description":"Reviewed resource stored privately"},"401":{"description":"Missing or invalid authentication"},"403":{"description":"Required inventory scope is missing"},"404":{"description":"Item is not visible to this owner"},"428":{"description":"Resource review confirmation is required"}},"summary":"Save a reviewed private item resource without fetching it","x-rms-default-visibility":"private","x-rms-delivery-side-effects":false,"x-rms-external-fetch":false,"x-rms-required-scope":"inventory:write","x-rms-review-required":true}},"/api/v2/items/{item_id}/resources/{resource_id}/file":{"get":{"operationId":"getNativeItemResourceFileV2","parameters":[{"in":"path","name":"item_id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"path","name":"resource_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Owner-scoped private response"},"401":{"description":"Missing or invalid authentication"},"403":{"description":"Required inventory scope is missing"},"404":{"description":"Item is not visible to this owner"}},"summary":"Read a protected uploaded PDF manual","x-rms-cache-control":"private, no-store","x-rms-required-scope":"inventory:read"}}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://borrowmyshit.org"}],"x-rms-api-version":"v1","x-rms-generated-at":"2026-09-20T08:16:50.002107+00:00","x-rms-route-inventory":{"audit_version":"rms-openapi-route-inventory-v1","extra_operations":[],"guidance":"Use fully documented operations for new app integrations. Registered-only operations require contract review before client adoption.","legacy_global_inventory_status":"not_asserted","missing_operations":[],"scope":"build9_plus_a1472_native_compatibility","status":"complete","summary":{"coverage_percent":100.0,"documented_operation_count":42,"documented_path_count":32,"extra_operation_count":0,"missing_operation_count":0,"registered_operation_count":42,"registered_path_count":32},"tracked_paths":["/api/v1/items/{item_id}","/api/v1/items/{item_id}/evidence-catalog","/api/v1/items/{item_id}/evidence-summary","/api/v1/items/{item_id}/evidence/{reference}/full","/api/v1/items/{item_id}/evidence/{reference}/full-reference","/api/v1/items/{item_id}/evidence/{reference}/thumbnail","/api/v1/missing","/api/v1/mobile/offline-queue","/api/v1/mobile/push-inbox","/api/v1/mobile/push-inbox/{event_id}/ack","/api/v1/mobile/push-inbox/{event_id}/read","/api/v1/native/account-hub","/api/v1/native/auth/exchange","/api/v1/native/auth/revoke","/api/v1/native/connections","/api/v1/native/connections/invites","/api/v1/native/loan-start","/api/v1/native/loans","/api/v1/native/loans/{loan_id}/conversation","/api/v1/native/loans/{loan_id}/conversation/messages/{message_id}/evidence/thumbnail","/api/v1/native/loans/{loan_id}/conversation/read","/api/v1/native/loans/{loan_id}/evidence-contribution-request","/api/v1/native/loans/{loan_id}/evidence-contribution-request/thumbnail","/api/v1/native/loans/{loan_id}/handoff","/api/v1/native/loans/{loan_id}/return","/api/v1/native/loans/{loan_id}/summary","/api/v1/native/web-session/continuations","/api/v2/items/{item_id}/catalog","/api/v2/items/{item_id}/media","/api/v2/items/{item_id}/media/{media_id}/{variant}","/api/v2/items/{item_id}/resources","/api/v2/items/{item_id}/resources/{resource_id}/file"]}}
