{"schemaVersion":"1.0","sourceCommit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca","sourceVisibility":"private","article":{"id":"api-mansoq-im-wrapper-public-document-1f223109","title":"Public Document API reference · mansoq-im-wrapper","summary":"Static source contract for Public Document: 1 declared or inherited operation mappings, schema/field evidence and authorization/refusal references. Deployment and behavioral review remain explicit.","module":"IT & integrations","roles":["IT administrator","Developer","Integration engineer"],"facilities":["All configured facility types"],"kind":"reference","minutes":3,"prerequisites":["Use the API contract from the installed deployment and an authorized synthetic test environment.","Confirm facility/organization scope, action permissions and optional app enablement.","This reference is static source evidence; complete payload, authorization, failure and end-to-end review remains recorded as pending."],"steps":[],"sections":[{"title":"Declared route and availability","body":"This resource is declared in **mansoq-im-wrapper** at `/api/{installed_plugin_prefix}/public/documents/{token}/`. plugin/local mount; actual prefix and enablement require deployment verification A registered path and an indexed handler do not prove deployment availability, user permission or production readiness."},{"title":"Operation map","body":"| Method | Path | Action | Evidence |\n| --- | --- | --- | --- |\n| ANY | `/api/{installed_plugin_prefix}/public/documents/{token}/` | public_document | explicit Django path/view declaration |"},{"title":"public_document · ANY","body":"Missing, invalid, expired, and unknown-kind tokens all 404 identically -- a caller\nlearns nothing from the difference, including whether a token ever existed.\n\nRate-limited per token rather than per client IP: behind a reverse proxy every\nrequest shares one REMOTE_ADDR, so an IP-keyed limit is really a single global one.\nThe token is 256 bits, so guessing is not the threat; capping reuse of a forwarded\nlink is.\n\n**ANY /api/{installed_plugin_prefix}/public/documents/{token}/** — action `public_document`. static function declaration extracted; request/runtime review pending.\n\nPath and deployment-context parameters:\n\n| Location | Parameter | Type | Required |\n| --- | --- | --- | --- |\n| path | token | string | true |\n| deployment mount | installed_plugin_prefix | deployment-selected mount prefix | true |\n\n**Authorization:** no literal permission name was resolved in the bounded handler/helper traversal. Authentication, inherited policies, object/facility scoping and middleware still require review; this does not mean public access.\n\n**Explicit response statuses in observed code:** 429. Other branches/framework exception handling may differ."},{"title":"Integration review checklist","body":"Confirm the installed route and full schema; review authentication, organization/facility scoping, all accepted fields, value-state and date/time semantics, idempotency, pagination, response/exception branches and the allowed correction/reversal workflow. Test positive and negative cases with synthetic data. This source reference does not establish external certification or replace an illustrated user procedure."}],"troubleshooting":[{"problem":"A declared route is unavailable or a request is rejected","solution":"Compare the installed revision, actual API schema, optional plugin mount, HTTP-method restrictions and recorded validation/permission evidence. Do not bypass a refusal or send a production transaction to test documentation."}],"sources":[{"path":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/urls.py","line":22,"commit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca"},{"path":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/documents/public_views.py","line":26,"commit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca"}],"related":["it-api-contract","it-api-auth","security-rcm-roles"],"verification":"Static API contract — behavior review pending","version":"f6e9f05f76d4","apiReferenceIds":["backend-path-3af8537f1f223109","backend-path-3af8537f1f223109:ANY:public_document"]},"backend":{"resources":[{"id":"backend-path-3af8537f1f223109","declaredPath":"public/documents/<str:token>/","dynamicPath":false,"source":{"path":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/urls.py","line":22,"commit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca"},"conditions":[],"kind":"view","view":"public_document","classId":"repositories/platform/mansoq-im-wrapper:mansoq_im_wrapper.documents.public_views.public_document","actionMapping":null,"operationIds":["backend-path-3af8537f1f223109:ANY:public_document"],"path":"/api/{installed_plugin_prefix}/public/documents/{token}/","mountStatus":"plugin/local mount; actual prefix and enablement require deployment verification","reviewStatus":"direct route enumerated; behavioral review pending"}],"operations":[{"id":"backend-path-3af8537f1f223109:ANY:public_document","resourceId":"backend-path-3af8537f1f223109","repository":"repositories/platform/mansoq-im-wrapper","boundary":"optional-plugin/local-service","method":"ANY","path":"/api/{installed_plugin_prefix}/public/documents/{token}/","declaredPattern":"public/documents/<str:token>/","action":"public_document","viewset":"public_document","classId":"repositories/platform/mansoq-im-wrapper:mansoq_im_wrapper.documents.public_views.public_document","detail":null,"mountStatus":"plugin/local mount; actual prefix and enablement require deployment verification","routeEvidence":{"path":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/urls.py","line":22,"commit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca"},"handlerSource":{"path":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/documents/public_views.py","line":26,"commit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca"},"registrationConditions":[],"evidenceKind":"explicit Django path/view declaration","decoratorStatus":null,"decoratorPolicy":{},"methodEvidenceIds":["repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/documents/public_views.py:26:public_document"],"schemaIds":{},"classPermissionEvidence":[],"filterEvidence":[],"reviewStatus":"static function declaration extracted; request/runtime review pending","pathParameters":[{"name":"token","in":"path","type":"string","required":true,"source":{"path":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/urls.py","line":22,"commit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca"}},{"name":"installed_plugin_prefix","in":"deployment mount","type":"deployment-selected mount prefix","required":true,"source":{"path":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/urls.py","line":22,"commit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca"}}]}],"methodEvidence":[{"id":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/documents/public_views.py:26:public_document","name":"public_document","owner":"repositories/platform/mansoq-im-wrapper:mansoq_im_wrapper.documents.public_views.public_document","summary":"Missing, invalid, expired, and unknown-kind tokens all 404 identically -- a caller\nlearns nothing from the difference, including whether a token ever existed.\n\nRate-limited per token rather than per client IP: behind a reverse proxy every\nrequest shares one REMOTE_ADDR, so an IP-keyed limit is really a single global one.\nThe token is 256 bits, so guessing is not the threat; capping reuse of a forwarded\nlink is.","source":{"path":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/documents/public_views.py","line":26,"commit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca"},"signatureParameters":[{"name":"token","type":"str","required":true,"source":{"path":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/documents/public_views.py","line":26,"commit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca"}}],"parametersRead":[],"permissionChecks":[],"declaredErrors":[],"explicitResponseStatuses":[{"value":429,"symbol":null,"source":{"path":"repositories/platform/mansoq-im-wrapper/src/mansoq_im_wrapper/documents/public_views.py","line":41,"commit":"f6e9f05f76d443b26ebd2369f67d3c3bd52257ca"}}],"conditions":[],"schemaIds":[],"schemaUsages":[],"unconditionalRaise":false,"reviewStatus":"static declaration extracted; behavioral/security review pending"}],"schemas":[],"frameworkSettings":[]},"frontend":{"operations":[],"schemas":[]},"services":{"operations":[]},"boundaries":[]}