{ "openapi": "3.1.0", "info": { "title": "InvestMoz — private existing-business intake", "version": "1.2.0", "description": "Internal preparation and review only. No publication, certification, legal transfer, NDA, payment or external CRM operation." }, "servers": [ { "url": "/api/v1/existing-business" } ], "paths": { "/listings": { "get": { "summary": "List own active records, 20 per page", "parameters": [ { "name": "page", "in": "query", "schema": { "type": "integer", "minimum": 1 } } ], "security": [ { "session": [] } ], "responses": { "200": { "description": "Private response; Cache-Control private, no-store", "content": { "application/json": { "schema": { "type": "object", "required": [ "records", "management", "modalities" ], "properties": { "records": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Business" } }, "total": { "type": "integer" } } }, "management": { "type": "boolean" }, "modalities": { "type": "array", "items": { "type": "string" } } } } } } }, "401": { "description": "Authentication required" }, "403": { "description": "Account, ownership or current reviewer/MFA policy rejected" }, "404": { "description": "Module disabled or resource unavailable" }, "409": { "description": "Stale version or invalid transition" }, "422": { "description": "Validation error" }, "429": { "description": "Rate limited" } } }, "post": { "summary": "Create private draft", "parameters": [], "security": [ { "session": [] } ], "responses": { "201": { "description": "Private response; Cache-Control private, no-store", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Business" } } } }, "401": { "description": "Authentication required" }, "403": { "description": "Account, ownership or current reviewer/MFA policy rejected" }, "404": { "description": "Module disabled or resource unavailable" }, "409": { "description": "Stale version or invalid transition" }, "422": { "description": "Validation error" }, "429": { "description": "Rate limited" } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "modality", "classification", "reason", "payload" ], "properties": { "modality": { "type": "string" }, "classification": { "enum": [ "internal", "confidential", "restricted" ] }, "reason": { "type": "string", "minLength": 10, "maxLength": 1000 }, "payload": { "type": "object", "additionalProperties": false, "required": ["title"], "properties": { "title": { "type": "string", "maxLength": 200, "description": "Proposed title" }, "description": { "type": ["string", "null"], "maxLength": 10000, "description": "Summary: what is available, sought and key conditions" }, "declared_reason": { "type": ["string", "null"], "maxLength": 2000, "description": "Reason and objective" }, "source_reference": { "type": ["string", "null"], "maxLength": 2000, "description": "Source reference" }, "valid_until": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Interest deadline (optional)" }, "proponent_type": { "type": ["string", "null"], "maxLength": 30, "enum": [ "organization", "sole_trader", "person", "public_entity", null ], "description": "Who is presenting the opportunity?" }, "proponent_name": { "type": ["string", "null"], "maxLength": 200, "description": "Name" }, "country": { "type": ["string", "null"], "maxLength": 2, "description": "Country of origin or incorporation (two-letter ISO code)" }, "tax_identifier": { "type": ["string", "null"], "maxLength": 50, "description": "NUIT or identifier (internal, when applicable)" }, "contact_name": { "type": ["string", "null"], "maxLength": 200, "description": "Contact person name" }, "contact_email": { "type": ["string", "null"], "maxLength": 254, "description": "Email (provide email or phone)" }, "contact_phone": { "type": ["string", "null"], "maxLength": 40, "description": "Phone (provide phone or email)" }, "contact_preference": { "type": ["string", "null"], "maxLength": 30, "enum": [ "through_portal", "approved_business_contact", null ], "description": "Contact preference" }, "acting_capacity": { "type": ["string", "null"], "maxLength": 30, "enum": [ "holder", "representative", null ], "description": "Acting capacity" }, "declared_holder": { "type": ["string", "null"], "maxLength": 200, "description": "Entity or person represented" }, "mandate_reference": { "type": ["string", "null"], "maxLength": 500, "description": "Authorization document reference" }, "mandate_document_reference": { "type": ["string", "null"], "maxLength": 500, "description": "Internal authorization document reference (do not upload here)" }, "mandate_valid_until": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Mandate expiry" }, "disclosure_scope": { "type": ["string", "null"], "maxLength": 2000, "description": "Limits of disclosure authorization" }, "legitimacy_declaration": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", "no", null], "description": "I declare authority to submit" }, "opportunity_type": { "type": ["string", "null"], "maxLength": 40, "enum": [ "investment_project", "company_sale", "asset_sale", "business_partnership", "financing_request", "concession_opportunity", "supply_opportunity", null ], "description": "Opportunity type" }, "subsector_activity": { "type": ["string", "null"], "maxLength": 500, "description": "Subsector and activity (by name)" }, "project_stage": { "type": ["string", "null"], "maxLength": 40, "enum": [ "idea", "study", "preparation", "implementation", "operating", "suspended", "other", null ], "description": "Project or business status" }, "project_stage_other": { "type": ["string", "null"], "maxLength": 200, "description": "Specify the status" }, "availability": { "type": ["string", "null"], "maxLength": 40, "enum": [ "available", "from_date", "negotiating", null ], "description": "Availability" }, "available_from": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Available from" }, "asking_value": { "type": ["string", "null"], "maxLength": 24, "description": "Value" }, "value_status": { "type": ["string", "null"], "maxLength": 30, "enum": [ "defined", "indicative", "consultation", "unknown", null ], "description": "Is the value defined?" }, "value_meaning": { "type": ["string", "null"], "maxLength": 30, "enum": [ "asking_price", "investment_estimate", "financing_sought", null ], "description": "Meaning of the value" }, "value_nature": { "type": ["string", "null"], "maxLength": 30, "enum": [ "asking", "indicative", "appraised", null ], "description": "Value basis" }, "currency": { "type": ["string", "null"], "maxLength": 3, "description": "Currency (three-letter code)" }, "amount_secured": { "type": ["string", "null"], "maxLength": 24, "description": "Secured amount (projects)" }, "investment_total": { "type": ["string", "null"], "maxLength": 24, "description": "Estimated total investment (projects)" }, "amount_sought": { "type": ["string", "null"], "maxLength": 24, "description": "Financing sought" }, "equity_percentage": { "type": ["string", "null"], "maxLength": 8, "description": "Available equity (%)" }, "funds_use": { "type": ["string", "null"], "maxLength": 2000, "description": "Use of funds" }, "asset_deal_kind": { "type": ["string", "null"], "maxLength": 30, "enum": [ "whole_business", "participation", "assets", null ], "description": "Type of sale" }, "partnership_contribution": { "type": ["string", "null"], "maxLength": 30, "enum": [ "capital", "technology", "management", "equipment", "distribution", "other", null ], "description": "Contribution sought" }, "asset_modality": { "type": ["string", "null"], "maxLength": 30, "enum": [ "sale", "lease", "other", null ], "description": "Asset arrangement" }, "concession_entity": { "type": ["string", "null"], "maxLength": 300, "description": "Concession authority" }, "concession_reference": { "type": ["string", "null"], "maxLength": 2000, "description": "Official reference, procedure and deadline" }, "supply_description": { "type": ["string", "null"], "maxLength": 2000, "description": "Good or service, quantity/capacity, destination and timing" }, "conditions": { "type": ["string", "null"], "maxLength": 4000, "description": "Additional conditions" }, "geography_scope": { "type": ["string", "null"], "maxLength": 30, "enum": [ "specific", "multiple", "national", "digital", null ], "description": "Geographic scope" }, "province_id": { "type": ["string", "null"], "maxLength": 36, "description": "Province or Maputo City" }, "district_id": { "type": ["string", "null"], "maxLength": 36, "description": "District" }, "admin_post_id": { "type": ["string", "null"], "maxLength": 36, "description": "Administrative post" }, "locality_id": { "type": ["string", "null"], "maxLength": 36, "description": "Locality" }, "location_notes": { "type": ["string", "null"], "maxLength": 2000, "description": "Address or reference (internal)" }, "location_unknown": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", "no", null], "description": "I do not know the exact location" }, "disclosure_precision": { "type": ["string", "null"], "maxLength": 30, "enum": [ "exact", "approximate", "administrative", null ], "description": "Disclosure precision" }, "asset_notes": { "type": ["string", "null"], "maxLength": 2000, "description": "Declared assets and rights summary" }, "source_provider": { "type": ["string", "null"], "maxLength": 500, "description": "Who supplied the information?" }, "source_date": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Source/information date" }, "official_source_entity": { "type": ["string", "null"], "maxLength": 500, "description": "Official source authority (if any)" }, "official_source_document": { "type": ["string", "null"], "maxLength": 500, "description": "Related official document" }, "official_source_url": { "type": ["string", "null"], "maxLength": 2000, "description": "Official source link" }, "official_source_period": { "type": ["string", "null"], "maxLength": 200, "description": "Official source period" }, "document_reference": { "type": ["string", "null"], "maxLength": 2000, "description": "Document references (not validated files)" }, "confirm_information": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", null], "description": "I confirm the information reflects what I know and identify estimates or pending items." }, "confirm_disclosure_authority": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", null], "description": "I confirm I am authorized to submit the opportunity and disclose selected content." }, "confirm_no_publication_guarantee": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", null], "description": "I understand submission is not publication, official approval or an investment guarantee." }, "wizard_version": { "type": ["string", "null"], "enum": ["1", null] }, "wizard_step": { "type": ["string", "null"], "pattern": "^[1-8]$" } } }, "sector_id": { "type": ["integer", "null"], "description": "Existing active public.sectors identifier; required on wizard submission." } } } } } }, "description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients." } }, "/reviews": { "get": { "summary": "List submitted records for designated reviewers with MFA; excludes own records", "parameters": [], "security": [ { "session": [] } ], "responses": { "200": { "description": "Private response; Cache-Control private, no-store", "content": { "application/json": { "schema": { "type": "object", "properties": { "records": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Business" } } } }, "management": { "type": "boolean" } } } } } }, "401": { "description": "Authentication required" }, "403": { "description": "Account, ownership or current reviewer/MFA policy rejected" }, "404": { "description": "Module disabled or resource unavailable" }, "409": { "description": "Stale version or invalid transition" }, "422": { "description": "Validation error" }, "429": { "description": "Rate limited" } } } }, "/listings/{id}": { "get": { "summary": "Read own record or currently reviewable submission", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "security": [ { "session": [] } ], "responses": { "200": { "description": "Private response; Cache-Control private, no-store", "content": { "application/json": { "schema": { "type": "object", "properties": { "record": { "$ref": "#/components/schemas/Business" }, "canEdit": { "type": "boolean" }, "owner": { "type": "boolean" }, "canReview": { "type": "boolean" }, "history": { "type": "array", "items": { "type": "object", "properties": { "version_no": { "type": "integer" }, "action": { "type": "string" }, "created_at": { "type": "string" }, "note": { "type": "string" } } } }, "verifications": { "type": "array", "items": { "type": "object", "required": [ "version_no", "check", "outcome", "evidence_reference", "note" ], "properties": { "version_no": { "type": "integer", "minimum": 1 }, "object_id": { "type": [ "string", "null" ], "format": "uuid" }, "check": { "enum": [ "identity", "representation", "declared_ownership", "documentary_ownership", "document_received", "document_validated", "independent_valuation", "land_right_documented", "license_confirmed", "validity", "legal_transfer", "prior_authorization" ] }, "outcome": { "enum": [ "confirmed", "rejected", "inconclusive", "revoked" ] }, "evidence_reference": { "type": "string", "minLength": 10, "maxLength": 2000 }, "note": { "type": "string", "minLength": 10, "maxLength": 2000 }, "valid_until": { "type": [ "string", "null" ], "format": "date", "description": "Required for confirmed findings; must be today or later." }, "effective_outcome": { "enum": [ "confirmed", "rejected", "inconclusive", "revoked", "stale", "expired" ] }, "content_version": { "type": "integer" }, "created_at": { "type": "string" } } } } } } } } }, "401": { "description": "Authentication required" }, "403": { "description": "Account, ownership or current reviewer/MFA policy rejected" }, "404": { "description": "Module disabled or resource unavailable" }, "409": { "description": "Stale version or invalid transition" }, "422": { "description": "Validation error" }, "429": { "description": "Rate limited" } } }, "put": { "summary": "Update owned draft or request for information; optimistic version required", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "security": [ { "session": [] } ], "responses": { "200": { "description": "Private response; Cache-Control private, no-store", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Business" } } } }, "401": { "description": "Authentication required" }, "403": { "description": "Account, ownership or current reviewer/MFA policy rejected" }, "404": { "description": "Module disabled or resource unavailable" }, "409": { "description": "Stale version or invalid transition" }, "422": { "description": "Validation error" }, "429": { "description": "Rate limited" } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "modality", "classification", "reason", "payload", "version_no" ], "properties": { "modality": { "type": "string" }, "classification": { "enum": [ "internal", "confidential", "restricted" ] }, "reason": { "type": "string", "minLength": 10, "maxLength": 1000 }, "payload": { "type": "object", "additionalProperties": false, "required": ["title"], "properties": { "title": { "type": "string", "maxLength": 200, "description": "Proposed title" }, "description": { "type": ["string", "null"], "maxLength": 10000, "description": "Summary: what is available, sought and key conditions" }, "declared_reason": { "type": ["string", "null"], "maxLength": 2000, "description": "Reason and objective" }, "source_reference": { "type": ["string", "null"], "maxLength": 2000, "description": "Source reference" }, "valid_until": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Interest deadline (optional)" }, "proponent_type": { "type": ["string", "null"], "maxLength": 30, "enum": [ "organization", "sole_trader", "person", "public_entity", null ], "description": "Who is presenting the opportunity?" }, "proponent_name": { "type": ["string", "null"], "maxLength": 200, "description": "Name" }, "country": { "type": ["string", "null"], "maxLength": 2, "description": "Country of origin or incorporation (two-letter ISO code)" }, "tax_identifier": { "type": ["string", "null"], "maxLength": 50, "description": "NUIT or identifier (internal, when applicable)" }, "contact_name": { "type": ["string", "null"], "maxLength": 200, "description": "Contact person name" }, "contact_email": { "type": ["string", "null"], "maxLength": 254, "description": "Email (provide email or phone)" }, "contact_phone": { "type": ["string", "null"], "maxLength": 40, "description": "Phone (provide phone or email)" }, "contact_preference": { "type": ["string", "null"], "maxLength": 30, "enum": [ "through_portal", "approved_business_contact", null ], "description": "Contact preference" }, "acting_capacity": { "type": ["string", "null"], "maxLength": 30, "enum": [ "holder", "representative", null ], "description": "Acting capacity" }, "declared_holder": { "type": ["string", "null"], "maxLength": 200, "description": "Entity or person represented" }, "mandate_reference": { "type": ["string", "null"], "maxLength": 500, "description": "Authorization document reference" }, "mandate_document_reference": { "type": ["string", "null"], "maxLength": 500, "description": "Internal authorization document reference (do not upload here)" }, "mandate_valid_until": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Mandate expiry" }, "disclosure_scope": { "type": ["string", "null"], "maxLength": 2000, "description": "Limits of disclosure authorization" }, "legitimacy_declaration": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", "no", null], "description": "I declare authority to submit" }, "opportunity_type": { "type": ["string", "null"], "maxLength": 40, "enum": [ "investment_project", "company_sale", "asset_sale", "business_partnership", "financing_request", "concession_opportunity", "supply_opportunity", null ], "description": "Opportunity type" }, "subsector_activity": { "type": ["string", "null"], "maxLength": 500, "description": "Subsector and activity (by name)" }, "project_stage": { "type": ["string", "null"], "maxLength": 40, "enum": [ "idea", "study", "preparation", "implementation", "operating", "suspended", "other", null ], "description": "Project or business status" }, "project_stage_other": { "type": ["string", "null"], "maxLength": 200, "description": "Specify the status" }, "availability": { "type": ["string", "null"], "maxLength": 40, "enum": [ "available", "from_date", "negotiating", null ], "description": "Availability" }, "available_from": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Available from" }, "asking_value": { "type": ["string", "null"], "maxLength": 24, "description": "Value" }, "value_status": { "type": ["string", "null"], "maxLength": 30, "enum": [ "defined", "indicative", "consultation", "unknown", null ], "description": "Is the value defined?" }, "value_meaning": { "type": ["string", "null"], "maxLength": 30, "enum": [ "asking_price", "investment_estimate", "financing_sought", null ], "description": "Meaning of the value" }, "value_nature": { "type": ["string", "null"], "maxLength": 30, "enum": [ "asking", "indicative", "appraised", null ], "description": "Value basis" }, "currency": { "type": ["string", "null"], "maxLength": 3, "description": "Currency (three-letter code)" }, "amount_secured": { "type": ["string", "null"], "maxLength": 24, "description": "Secured amount (projects)" }, "investment_total": { "type": ["string", "null"], "maxLength": 24, "description": "Estimated total investment (projects)" }, "amount_sought": { "type": ["string", "null"], "maxLength": 24, "description": "Financing sought" }, "equity_percentage": { "type": ["string", "null"], "maxLength": 8, "description": "Available equity (%)" }, "funds_use": { "type": ["string", "null"], "maxLength": 2000, "description": "Use of funds" }, "asset_deal_kind": { "type": ["string", "null"], "maxLength": 30, "enum": [ "whole_business", "participation", "assets", null ], "description": "Type of sale" }, "partnership_contribution": { "type": ["string", "null"], "maxLength": 30, "enum": [ "capital", "technology", "management", "equipment", "distribution", "other", null ], "description": "Contribution sought" }, "asset_modality": { "type": ["string", "null"], "maxLength": 30, "enum": [ "sale", "lease", "other", null ], "description": "Asset arrangement" }, "concession_entity": { "type": ["string", "null"], "maxLength": 300, "description": "Concession authority" }, "concession_reference": { "type": ["string", "null"], "maxLength": 2000, "description": "Official reference, procedure and deadline" }, "supply_description": { "type": ["string", "null"], "maxLength": 2000, "description": "Good or service, quantity/capacity, destination and timing" }, "conditions": { "type": ["string", "null"], "maxLength": 4000, "description": "Additional conditions" }, "geography_scope": { "type": ["string", "null"], "maxLength": 30, "enum": [ "specific", "multiple", "national", "digital", null ], "description": "Geographic scope" }, "province_id": { "type": ["string", "null"], "maxLength": 36, "description": "Province or Maputo City" }, "district_id": { "type": ["string", "null"], "maxLength": 36, "description": "District" }, "admin_post_id": { "type": ["string", "null"], "maxLength": 36, "description": "Administrative post" }, "locality_id": { "type": ["string", "null"], "maxLength": 36, "description": "Locality" }, "location_notes": { "type": ["string", "null"], "maxLength": 2000, "description": "Address or reference (internal)" }, "location_unknown": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", "no", null], "description": "I do not know the exact location" }, "disclosure_precision": { "type": ["string", "null"], "maxLength": 30, "enum": [ "exact", "approximate", "administrative", null ], "description": "Disclosure precision" }, "asset_notes": { "type": ["string", "null"], "maxLength": 2000, "description": "Declared assets and rights summary" }, "source_provider": { "type": ["string", "null"], "maxLength": 500, "description": "Who supplied the information?" }, "source_date": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Source/information date" }, "official_source_entity": { "type": ["string", "null"], "maxLength": 500, "description": "Official source authority (if any)" }, "official_source_document": { "type": ["string", "null"], "maxLength": 500, "description": "Related official document" }, "official_source_url": { "type": ["string", "null"], "maxLength": 2000, "description": "Official source link" }, "official_source_period": { "type": ["string", "null"], "maxLength": 200, "description": "Official source period" }, "document_reference": { "type": ["string", "null"], "maxLength": 2000, "description": "Document references (not validated files)" }, "confirm_information": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", null], "description": "I confirm the information reflects what I know and identify estimates or pending items." }, "confirm_disclosure_authority": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", null], "description": "I confirm I am authorized to submit the opportunity and disclose selected content." }, "confirm_no_publication_guarantee": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", null], "description": "I understand submission is not publication, official approval or an investment guarantee." }, "wizard_version": { "type": ["string", "null"], "enum": ["1", null] }, "wizard_step": { "type": ["string", "null"], "pattern": "^[1-8]$" } } }, "version_no": { "type": "integer", "minimum": 1 }, "sector_id": { "type": ["integer", "null"], "description": "Existing active public.sectors identifier; required on wizard submission." } } } } } }, "description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients." } }, "/listings/{id}/transitions": { "post": { "summary": "Submit, begin review, request information or withdraw", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "security": [ { "session": [] } ], "responses": { "200": { "description": "Private response; Cache-Control private, no-store", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Business" } } } }, "401": { "description": "Authentication required" }, "403": { "description": "Account, ownership or current reviewer/MFA policy rejected" }, "404": { "description": "Module disabled or resource unavailable" }, "409": { "description": "Stale version or invalid transition" }, "422": { "description": "Validation error" }, "429": { "description": "Rate limited" } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": ["version_no", "action", "note"], "properties": { "version_no": { "type": "integer", "minimum": 1 }, "action": { "enum": [ "submitted", "in_review", "needs_information", "withdrawn" ] }, "note": { "type": "string", "minLength": 10, "maxLength": 2000 }, "review_consent": { "type": "boolean", "description": "Must be true for submission. Stored in encrypted review evidence. Does not authorize publication." }, "confirmation_code": { "type": ["string", "null"], "description": "Exact business code required for wizard_version=1 submission, in addition to internal review consent." } } } } } }, "description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients." } }, "/listings/{id}/objects": { "post": { "summary": "Declare a separate restricted object; increments aggregate version without granting verification", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "security": [ { "session": [] } ], "responses": { "201": { "description": "Private response; Cache-Control private, no-store", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "version_no": { "type": "integer" }, "verification_status": { "const": "pending" } } } } } }, "401": { "description": "Authentication required" }, "403": { "description": "Account, ownership or current reviewer/MFA policy rejected" }, "404": { "description": "Module disabled or resource unavailable" }, "409": { "description": "Stale version or invalid transition" }, "422": { "description": "Validation error" }, "429": { "description": "Rate limited" } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "kind", "version_no", "reason", "payload" ], "properties": { "kind": { "enum": [ "company", "participation", "asset", "property", "unit", "improvement", "agricultural_investment", "land_right", "contract", "license", "authorization", "encumbrance", "valuation", "capital_request" ] }, "version_no": { "type": "integer", "minimum": 1 }, "reason": { "type": "string", "minLength": 10, "maxLength": 1000 }, "payload": { "type": "object", "additionalProperties": false, "required": [ "label", "source_reference" ], "properties": { "label": { "type": ["string", "null"] }, "declared_holder": { "type": ["string", "null"] }, "document_reference": { "type": ["string", "null"] }, "source_reference": { "type": ["string", "null"] }, "competent_entity": { "type": ["string", "null"] }, "purpose": { "type": ["string", "null"] }, "location_description": { "type": ["string", "null"] }, "boundaries_description": { "type": ["string", "null"] }, "occupancy": { "type": ["string", "null"] }, "condition": { "type": ["string", "null"] }, "encumbrances": { "type": ["string", "null"] }, "restrictions": { "type": ["string", "null"] }, "required_authorizations": { "type": ["string", "null"] }, "transfer_condition": { "type": ["string", "null"] }, "contract_type": { "type": ["string", "null"] }, "valid_from": { "type": ["string", "null"] }, "valid_until": { "type": ["string", "null"] }, "area": { "type": ["string", "null"] }, "area_unit": { "type": ["string", "null"] }, "amount": { "type": ["string", "null"] }, "currency": { "type": ["string", "null"] }, "value_kind": { "type": ["string", "null"] }, "participation_percent": { "type": ["string", "null"] } } } } } } } }, "description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients." } }, "/listings/{id}/objects/{object}": { "put": { "summary": "Update scoped object with immutable kind; amount requires currency and value kind; area requires unit", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "object", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "security": [ { "session": [] } ], "responses": { "200": { "description": "Private response; Cache-Control private, no-store", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "version_no": { "type": "integer" }, "verification_status": { "const": "pending" } } } } } }, "401": { "description": "Authentication required" }, "403": { "description": "Account, ownership or current reviewer/MFA policy rejected" }, "404": { "description": "Module disabled or resource unavailable" }, "409": { "description": "Stale version or invalid transition" }, "422": { "description": "Validation error" }, "429": { "description": "Rate limited" } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "kind", "version_no", "reason", "payload" ], "properties": { "kind": { "enum": [ "company", "participation", "asset", "property", "unit", "improvement", "agricultural_investment", "land_right", "contract", "license", "authorization", "encumbrance", "valuation", "capital_request" ] }, "version_no": { "type": "integer", "minimum": 1 }, "reason": { "type": "string", "minLength": 10, "maxLength": 1000 }, "payload": { "type": "object", "additionalProperties": false, "required": [ "label", "source_reference" ], "properties": { "label": { "type": ["string", "null"] }, "declared_holder": { "type": ["string", "null"] }, "document_reference": { "type": ["string", "null"] }, "source_reference": { "type": ["string", "null"] }, "competent_entity": { "type": ["string", "null"] }, "purpose": { "type": ["string", "null"] }, "location_description": { "type": ["string", "null"] }, "boundaries_description": { "type": ["string", "null"] }, "occupancy": { "type": ["string", "null"] }, "condition": { "type": ["string", "null"] }, "encumbrances": { "type": ["string", "null"] }, "restrictions": { "type": ["string", "null"] }, "required_authorizations": { "type": ["string", "null"] }, "transfer_condition": { "type": ["string", "null"] }, "contract_type": { "type": ["string", "null"] }, "valid_from": { "type": ["string", "null"] }, "valid_until": { "type": ["string", "null"] }, "area": { "type": ["string", "null"] }, "area_unit": { "type": ["string", "null"] }, "amount": { "type": ["string", "null"] }, "currency": { "type": ["string", "null"] }, "value_kind": { "type": ["string", "null"] }, "participation_percent": { "type": ["string", "null"] } } } } } } } }, "description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients." } }, "/listings/{id}/verifications": { "post": { "summary": "Record independent finding while in_review; immutable encrypted evidence, optimistic version and scoped object. Does not publish or certify the business.", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } } ], "security": [ { "session": [] } ], "responses": { "200": { "description": "Private response; Cache-Control private, no-store", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Business" } } } }, "401": { "description": "Authentication required" }, "403": { "description": "Account, ownership or current reviewer/MFA policy rejected" }, "404": { "description": "Module disabled or resource unavailable" }, "409": { "description": "Stale version or invalid transition" }, "422": { "description": "Validation error" }, "429": { "description": "Rate limited" } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "version_no", "check", "outcome", "evidence_reference", "note" ], "properties": { "version_no": { "type": "integer", "minimum": 1 }, "object_id": { "type": ["string", "null"], "format": "uuid" }, "check": { "enum": [ "identity", "representation", "declared_ownership", "documentary_ownership", "document_received", "document_validated", "independent_valuation", "land_right_documented", "license_confirmed", "validity", "legal_transfer", "prior_authorization" ] }, "outcome": { "enum": [ "confirmed", "rejected", "inconclusive", "revoked" ] }, "evidence_reference": { "type": "string", "minLength": 10, "maxLength": 2000 }, "note": { "type": "string", "minLength": 10, "maxLength": 2000 }, "valid_until": { "type": ["string", "null"], "format": "date", "description": "Required for confirmed findings; must be today or later." } } } } } }, "description": "Session authentication and Laravel CSRF/origin protection apply. Use X-XSRF-TOKEN for browser clients." } } }, "components": { "securitySchemes": { "session": { "type": "apiKey", "in": "cookie", "name": "session_cookie", "description": "Actual Laravel cookie name comes from deployment configuration; no bearer token support." } }, "schemas": { "Business": { "type": "object", "required": [ "id", "code", "modality", "status", "classification", "version_no", "payload" ], "properties": { "id": { "type": "string", "format": "uuid" }, "code": { "type": "string" }, "modality": { "type": "string" }, "status": { "enum": [ "draft", "submitted", "in_review", "needs_information", "withdrawn" ] }, "classification": { "enum": ["internal", "confidential", "restricted"] }, "version_no": { "type": "integer", "minimum": 1 }, "payload": { "type": "object", "additionalProperties": false, "required": ["title"], "properties": { "title": { "type": "string", "maxLength": 200, "description": "Proposed title" }, "description": { "type": ["string", "null"], "maxLength": 10000, "description": "Summary: what is available, sought and key conditions" }, "declared_reason": { "type": ["string", "null"], "maxLength": 2000, "description": "Reason and objective" }, "source_reference": { "type": ["string", "null"], "maxLength": 2000, "description": "Source reference" }, "valid_until": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Interest deadline (optional)" }, "proponent_type": { "type": ["string", "null"], "maxLength": 30, "enum": [ "organization", "sole_trader", "person", "public_entity", null ], "description": "Who is presenting the opportunity?" }, "proponent_name": { "type": ["string", "null"], "maxLength": 200, "description": "Name" }, "country": { "type": ["string", "null"], "maxLength": 2, "description": "Country of origin or incorporation (two-letter ISO code)" }, "tax_identifier": { "type": ["string", "null"], "maxLength": 50, "description": "NUIT or identifier (internal, when applicable)" }, "contact_name": { "type": ["string", "null"], "maxLength": 200, "description": "Contact person name" }, "contact_email": { "type": ["string", "null"], "maxLength": 254, "description": "Email (provide email or phone)" }, "contact_phone": { "type": ["string", "null"], "maxLength": 40, "description": "Phone (provide phone or email)" }, "contact_preference": { "type": ["string", "null"], "maxLength": 30, "enum": [ "through_portal", "approved_business_contact", null ], "description": "Contact preference" }, "acting_capacity": { "type": ["string", "null"], "maxLength": 30, "enum": ["holder", "representative", null], "description": "Acting capacity" }, "declared_holder": { "type": ["string", "null"], "maxLength": 200, "description": "Entity or person represented" }, "mandate_reference": { "type": ["string", "null"], "maxLength": 500, "description": "Authorization document reference" }, "mandate_document_reference": { "type": ["string", "null"], "maxLength": 500, "description": "Internal authorization document reference (do not upload here)" }, "mandate_valid_until": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Mandate expiry" }, "disclosure_scope": { "type": ["string", "null"], "maxLength": 2000, "description": "Limits of disclosure authorization" }, "legitimacy_declaration": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", "no", null], "description": "I declare authority to submit" }, "opportunity_type": { "type": ["string", "null"], "maxLength": 40, "enum": [ "investment_project", "company_sale", "asset_sale", "business_partnership", "financing_request", "concession_opportunity", "supply_opportunity", null ], "description": "Opportunity type" }, "subsector_activity": { "type": ["string", "null"], "maxLength": 500, "description": "Subsector and activity (by name)" }, "project_stage": { "type": ["string", "null"], "maxLength": 40, "enum": [ "idea", "study", "preparation", "implementation", "operating", "suspended", "other", null ], "description": "Project or business status" }, "project_stage_other": { "type": ["string", "null"], "maxLength": 200, "description": "Specify the status" }, "availability": { "type": ["string", "null"], "maxLength": 40, "enum": [ "available", "from_date", "negotiating", null ], "description": "Availability" }, "available_from": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Available from" }, "asking_value": { "type": ["string", "null"], "maxLength": 24, "description": "Value" }, "value_status": { "type": ["string", "null"], "maxLength": 30, "enum": [ "defined", "indicative", "consultation", "unknown", null ], "description": "Is the value defined?" }, "value_meaning": { "type": ["string", "null"], "maxLength": 30, "enum": [ "asking_price", "investment_estimate", "financing_sought", null ], "description": "Meaning of the value" }, "value_nature": { "type": ["string", "null"], "maxLength": 30, "enum": [ "asking", "indicative", "appraised", null ], "description": "Value basis" }, "currency": { "type": ["string", "null"], "maxLength": 3, "description": "Currency (three-letter code)" }, "amount_secured": { "type": ["string", "null"], "maxLength": 24, "description": "Secured amount (projects)" }, "investment_total": { "type": ["string", "null"], "maxLength": 24, "description": "Estimated total investment (projects)" }, "amount_sought": { "type": ["string", "null"], "maxLength": 24, "description": "Financing sought" }, "equity_percentage": { "type": ["string", "null"], "maxLength": 8, "description": "Available equity (%)" }, "funds_use": { "type": ["string", "null"], "maxLength": 2000, "description": "Use of funds" }, "asset_deal_kind": { "type": ["string", "null"], "maxLength": 30, "enum": [ "whole_business", "participation", "assets", null ], "description": "Type of sale" }, "partnership_contribution": { "type": ["string", "null"], "maxLength": 30, "enum": [ "capital", "technology", "management", "equipment", "distribution", "other", null ], "description": "Contribution sought" }, "asset_modality": { "type": ["string", "null"], "maxLength": 30, "enum": ["sale", "lease", "other", null], "description": "Asset arrangement" }, "concession_entity": { "type": ["string", "null"], "maxLength": 300, "description": "Concession authority" }, "concession_reference": { "type": ["string", "null"], "maxLength": 2000, "description": "Official reference, procedure and deadline" }, "supply_description": { "type": ["string", "null"], "maxLength": 2000, "description": "Good or service, quantity/capacity, destination and timing" }, "conditions": { "type": ["string", "null"], "maxLength": 4000, "description": "Additional conditions" }, "geography_scope": { "type": ["string", "null"], "maxLength": 30, "enum": [ "specific", "multiple", "national", "digital", null ], "description": "Geographic scope" }, "province_id": { "type": ["string", "null"], "maxLength": 36, "description": "Province or Maputo City" }, "district_id": { "type": ["string", "null"], "maxLength": 36, "description": "District" }, "admin_post_id": { "type": ["string", "null"], "maxLength": 36, "description": "Administrative post" }, "locality_id": { "type": ["string", "null"], "maxLength": 36, "description": "Locality" }, "location_notes": { "type": ["string", "null"], "maxLength": 2000, "description": "Address or reference (internal)" }, "location_unknown": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", "no", null], "description": "I do not know the exact location" }, "disclosure_precision": { "type": ["string", "null"], "maxLength": 30, "enum": [ "exact", "approximate", "administrative", null ], "description": "Disclosure precision" }, "asset_notes": { "type": ["string", "null"], "maxLength": 2000, "description": "Declared assets and rights summary" }, "source_provider": { "type": ["string", "null"], "maxLength": 500, "description": "Who supplied the information?" }, "source_date": { "type": ["string", "null"], "maxLength": 10, "format": "date", "description": "Source/information date" }, "official_source_entity": { "type": ["string", "null"], "maxLength": 500, "description": "Official source authority (if any)" }, "official_source_document": { "type": ["string", "null"], "maxLength": 500, "description": "Related official document" }, "official_source_url": { "type": ["string", "null"], "maxLength": 2000, "description": "Official source link" }, "official_source_period": { "type": ["string", "null"], "maxLength": 200, "description": "Official source period" }, "document_reference": { "type": ["string", "null"], "maxLength": 2000, "description": "Document references (not validated files)" }, "confirm_information": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", null], "description": "I confirm the information reflects what I know and identify estimates or pending items." }, "confirm_disclosure_authority": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", null], "description": "I confirm I am authorized to submit the opportunity and disclose selected content." }, "confirm_no_publication_guarantee": { "type": ["string", "null"], "maxLength": 3, "enum": ["yes", null], "description": "I understand submission is not publication, official approval or an investment guarantee." }, "wizard_version": { "type": ["string", "null"], "enum": ["1", null] }, "wizard_step": { "type": ["string", "null"], "pattern": "^[1-8]$" } } }, "sector_id": { "type": ["integer", "null"], "description": "Existing active public.sectors identifier; required on wizard submission." } } } } } }