{ "Protocol": "AIXE", "Version": "1.0", "ProtocolReference": { "ProtocolHome": "http://aixeprotocol.com/", "CanonicalUsageContract": "http://aixeprotocol.com/usage/?", "Whitepaper": "http://aixeprotocol.com/whitepaper/full-spec.html", "Inventor": "Gregory Oglethorpe" }, "Endpoint": "/aixe/businesses/review-business", "Method": "POST", "DiscoveryRequest": "GET /aixe/businesses/review-business/?", "ContentType": "application/json; charset=utf-8", "AccessType": "Public", "Purpose": "Submit a written review for an active Internet of Doing business and immediately notify the business owner by email and text message.", "RequiredFields": { "BusinessKey": { "Type": "string", "Required": true, "SubmittedIn": "JSON body", "Description": "Public key of the active business being reviewed. Obtain it from the Internet of Doing business directory search or the selected business manifest. Submit the key in this JSON field, never in the route." }, "ReviewBody": { "Type": "string", "Required": true, "SubmittedIn": "JSON body", "Description": "The complete review text to deliver to the business owner. Leading and trailing whitespace is removed. The review must contain 1 through 4,000 characters after trimming." } }, "OptionalFields": {}, "BusinessRules": [ "These are the only accepted business inputs. No login, reviewer identity, rating, RequestKey, or other field is required.", "Use this endpoint only after the human has supplied or approved both the intended business and the complete review body. Submission immediately contacts the business owner.", "The endpoint permanently stores the review and links it to the selected business before attempting notifications. It does not publish the review on a public page.", "After storage, it emails the full review to the business\u0027s configured notification email and sends the configured notification phone a short message saying a review was received and to check email.", "SUCCESS means the review was stored. Inspect EmailNotificationAccepted and TextNotificationAccepted separately; notification failure never removes or rolls back the stored review. Provider acceptance does not guarantee final inbox or handset delivery.", "Notification destinations are private and are never returned. A missing destination leaves its acceptance field false but does not prevent storage.", "This action is not idempotent and intentionally has no RequestKey. Do not resubmit after SUCCESS, even when a notification field is false, because doing so creates a duplicate stored review." ], "Workflow": [ "Identify the intended active business and obtain its BusinessKey from a directory or manifest response.", "Confirm the human\u0027s final review wording, then submit BusinessKey and ReviewBody once.", "Treat SuccessCode SUCCESS as confirmation that the review was stored. Report notification acceptance separately and do not retry merely because a notification was not accepted." ], "ExampleRequest": { "BusinessKey": "00000000-0000-0000-0000-000000000000", "ReviewBody": "The team was responsive, professional, and completed the work as promised." }, "ResponseMeaning": { "BusinessKey": "The submitted public business key.", "BusinessName": "Display name of the reviewed business.", "BusinessReviewKey": "Public key of the permanently stored review.", "EmailNotificationAccepted": "True when the email provider accepted the full review message.", "TextNotificationAccepted": "True when the text provider accepted the short notification.", "Message": "Plain-language outcome guidance." }, "ActionResponse": { "RequiredResponseFields": [ "SuccessCode" ], "SuccessCodes": [ "SUCCESS" ], "FailureCodes": [ "VALIDATION_FAILED", "NOT_FOUND", "FAILED" ], "MissingOrEmptyResponse": "Treat as FAILED. Never infer success from HTTP status alone." }, "Errors": [ { "SuccessCode": "VALIDATION_FAILED", "Meaning": "BusinessKey or ReviewBody is missing, blank, or too long.", "Recovery": "Supply both required fields and keep ReviewBody at 4,000 characters or fewer." }, { "SuccessCode": "NOT_FOUND", "Meaning": "No active business matches BusinessKey.", "Recovery": "Obtain the current BusinessKey from the directory search or business manifest and confirm the intended business with the human." }, { "SuccessCode": "FAILED", "Meaning": "The review could not be stored.", "Recovery": "Do not claim that the review exists. Report the failure and retry later only with user intent." } ] }