{ "Protocol": "AIXE", "Version": "1.0", "Endpoint": "/aixe/rfqs/cancel-request-for-quote", "Title": "Cancel RFQ", "Purpose": "Stop a Draft or Open RFQ. Businesses previously invited receive closure emails, and outstanding quotes become Not Accepted. Records remain available in history.", "DiscoveryRequest": "GET /aixe/rfqs/cancel-request-for-quote/?", "ActionRequest": "POST /aixe/rfqs/cancel-request-for-quote", "Method": "POST", "AccessType": "Public", "ContentType": "application/json; charset=utf-8", "ProtocolReference": { "ProtocolHome": "http://aixeprotocol.com/", "CanonicalUsageContract": "http://aixeprotocol.com/usage/?", "Whitepaper": "http://aixeprotocol.com/whitepaper/full-spec.html", "Inventor": "Gregory Oglethorpe" }, "RequiredFields": { "PersonAuthenticationToken": { "Type": "string", "Required": true, "SubmittedIn": "JSON body", "Description": "Secret active 15-minute token from /aixe/account/login. Customer tokens act only for that business-specific customer account; business-owner tokens act only for that vendor. Keys alone do not authorize access.", "Constraints": { "MaxLength": 64 } }, "RequestForQuoteKey": { "Type": "string", "Required": true, "SubmittedIn": "JSON body", "Description": "Public RFQ key returned by creation or search. Select the exact request the human intends to work with.", "Constraints": { "MaxLength": 50 } } }, "OptionalFields": {}, "Authentication": "Public discovery does not mean public records. Login at /aixe/account/login with BusinessKey, Email and Password, then send PersonAuthenticationToken. For customer registration read /aixe/customers/create-profile/?. Customer accounts and their RFQs remain distinct across businesses, even when emails match.", "InteractionGuidance": [ "Read this live contract before calling. Use search summaries, then fetch only the selected RFQ or quote and bounded messages.", "For RFQ creation, understand the requested product or service and independently ask pertinent questions a qualified provider would need answered. There is no fixed questionnaire. Adapt follow-up questions to the customer\u0027s answers; ask only relevant questions and do not invent missing information.", "Lawn mowing, hedge trimming, and car washing need different details. These are illustrative examples, not predefined question sets or special fields. Exercise judgment for any product or service.", "Collect ZIP and radius, identify relevant NAICS codes, and put the confirmed work requirements in Description. Explain that matching vendors will receive the request. Save a draft with create-request-for-quote; review the summary with the customer, then call submit-request-for-quote to distribute it and lock it permanently.", "A submitted RFQ cannot be edited. To rebuild one, read it, create a new draft using the intended requirements, then submit the new draft after confirmation.", "Before accepting, present the current amount, pricing basis, scope, schedule, expiration and terms. Acceptance selects one winner and closes the RFQ; all other invited businesses get closure emails.", "Every website capability on the RFQ screens uses these same permissions and business rules." ], "BusinessRules": [ "RFQ states: Draft (editable), Open (submitted and immutable), Closed (a quote was accepted), Cancelled (customer stopped it).", "Response states: Awaiting Response (private proposal preparation), Submitted (visible to the customer), Declined (removed from the vendor\u0027s active view).", "Customer quote states: Pending (considering), Maybe (shortlisted), Accepted (winner), Rejected (explicitly declined), Not Accepted (outstanding quote when RFQ closed). Existing Rejected decisions remain Rejected.", "Any authenticated customer may create RFQs regardless of originating business. Only that customer manages the RFQ. All businesses may respond to their own assigned opportunities; owning the customer\u0027s originating business does not confer access to the customer\u0027s RFQs or competing proposals.", "Matching uses active businesses, any requested NAICS code, and ZIP-to-ZIP distance. One opportunity per matching business. Zero matches still produces an Open, locked RFQ and is reported in Message.", "Only businesses may save, submit, or decline their assigned quotes. Only customers may set customer quote status. Quote changes require an Open RFQ and Pending or Maybe quote that has not been declined.", "Submitted quotes may be revised until accepted or rejected. Amount reductions notify the customer with previous and new pricing bases; Maybe remains Maybe. Expired quotes cannot be accepted.", "Status change emails are sent only when the customer\u0027s decision changes. Acceptance also emails every other invited business that the RFQ is closed. No automated email is stored as a conversation message.", "Messages are private to the RFQ owner and assigned vendor. Declined opportunities cannot receive new messages. Closed conversations remain available to the participants.", "Persistence is completed before email delivery is attempted. EmailsFailed greater than zero means the business action succeeded but some notifications failed; do not repeat a saved action to resend emails." ], "ActionResponse": { "RequiredResponseFields": [ "SuccessCode", "Message" ], "SuccessCodes": [ "SUCCESS" ], "FailureCodes": [ "VALIDATION_FAILED", "UNAUTHORIZED", "NOT_FOUND", "BUSINESS_RULE_FAILED", "FAILED" ], "Data": "Searches return Results and HasMore; RFQ creation/detail returns public RFQ fields and RFQ number; quote detail returns current terms, nested RFQ, and CanEdit/CanDecide/CanMessage; messages return public key, creation date, sender type, and body. Mutation Data may be null. Numeric internal identifiers are never returned.", "Notifications": "EmailsSent and EmailsFailed count notification attempts for this action; inspect both and Message. Neither count determines persistence success.", "Rule": "Only SUCCESS confirms the business operation. Inspect the body, not HTTP status alone. Missing or unreadable responses do not confirm success." }, "Errors": [ { "SuccessCode": "VALIDATION_FAILED", "Meaning": "A field is missing, malformed, or outside its allowed values.", "Recovery": "Correct Field using Message and ValidValues (or the Errors collection for request binding failures), then retry." }, { "SuccessCode": "UNAUTHORIZED", "Meaning": "The token or portal session is missing or expired.", "Recovery": "Sign in to the intended customer or business account again." }, { "SuccessCode": "NOT_FOUND", "Meaning": "The record is missing or inaccessible to this identity.", "Recovery": "Search your accessible records and use the returned public key." }, { "SuccessCode": "BUSINESS_RULE_FAILED", "Meaning": "The account role or current record status does not permit the action.", "Recovery": "Read the current record, respect its state, and follow Message. Do not retry an immutable RFQ edit." }, { "SuccessCode": "FAILED", "Meaning": "Completion could not be confirmed.", "Recovery": "Read the current RFQ or quote before retrying. Contact support if the failure continues." } ] }