{"openapi":"3.1.0","info":{"title":"ResidentPrints Public API","version":"1.0.0","summary":"Public endpoints for the ResidentPrints managed printer amenity.","description":"ResidentPrints installs and manages print/scan/copy stations in apartment communities. This spec covers the unauthenticated public surface: requesting a property proposal, sending a general message, and the machine-readable discovery endpoints. Resident and property-management APIs require a dashboard session and are not part of the public surface. Agents can also use the MCP server at https://www.residentprints.com/mcp (Streamable HTTP), which exposes the same capabilities as tools.","contact":{"name":"ResidentPrints Support","email":"support@residentprints.com","url":"https://www.residentprints.com/contact"},"termsOfService":"https://www.residentprints.com/terms"},"servers":[{"url":"https://www.residentprints.com","description":"Production"}],"paths":{"/api/contact/sales":{"post":{"operationId":"requestPropertyProposal","summary":"Request a property proposal","description":"Submit property details to receive a property-specific monthly proposal for the managed printer amenity. The ResidentPrints team responds within one business day. Rate limited to 5 requests per 15 minutes per IP.","tags":["Sales"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalRequest"},"example":{"name":"Jordan Alvarez","email":"jalvarez@example-properties.com","phone":"+1 (404) 555-0132","propertyName":"The Reserve at Piedmont","location":"Atlanta, GA 30309","units":"220","message":"Two towers, shared amenity lounge on floor 2."}}}},"responses":{"200":{"description":"Proposal request received; the team follows up within one business day.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageAccepted"}}}},"400":{"description":"Validation failed — see error.message for the field to fix.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited — retry after the number of seconds in the Retry-After header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"The message could not be delivered; retry later or email support@residentprints.com.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/contact":{"post":{"operationId":"sendContactMessage","summary":"Send a general contact message","description":"Send a free-form message to the ResidentPrints team. For proposal/pricing requests prefer requestPropertyProposal, which captures property details. Rate limited to 5 requests per 15 minutes per IP.","tags":["Sales"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactMessage"},"example":{"name":"Sam Lee","email":"sam@example.com","message":"Do you support condo buildings under HOA management?"}}}},"responses":{"200":{"description":"Message sent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageAccepted"}}}},"400":{"description":"Validation failed — name, email, and message are all required strings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited — retry after the number of seconds in the Retry-After header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"The message could not be delivered; retry later or email support@residentprints.com.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmsTxt","summary":"Site map and usage guidance for AI agents","description":"llms.txt (llmstxt.org format): a curated markdown map of the site with when-to-use guidance for agents.","tags":["Discovery"],"responses":{"200":{"description":"Markdown document.","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApiSpec","summary":"This OpenAPI specification","description":"The machine-readable description of the ResidentPrints public API.","tags":["Discovery"],"responses":{"200":{"description":"OpenAPI 3.1 document.","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code (e.g. invalid_request, rate_limited, not_found, email_failed)."},"message":{"type":"string","description":"Human-readable explanation of what went wrong."},"hint":{"type":"string","description":"What the caller should change before retrying."},"docs":{"type":"string","format":"uri","description":"Documentation URL for this API."}}}}},"MessageAccepted":{"type":"object","required":["success"],"properties":{"success":{"type":"boolean","const":true},"message":{"type":"string","description":"Confirmation text."}}},"ProposalRequest":{"type":"object","required":["name","email","propertyName","location","units"],"properties":{"name":{"type":"string","minLength":2,"maxLength":100,"description":"Requester's full name."},"email":{"type":"string","format":"email","maxLength":254,"description":"Work email address for the follow-up."},"phone":{"type":"string","maxLength":30,"description":"Optional phone number."},"propertyName":{"type":"string","minLength":2,"maxLength":160,"description":"Property or management company name."},"location":{"type":"string","minLength":2,"maxLength":100,"description":"Property city or ZIP code (service area: metro Atlanta, GA)."},"units":{"type":"string","pattern":"^\\d+$","description":"Number of units at the property as a whole number string, 1–100000."},"message":{"type":"string","maxLength":1000,"description":"Optional additional context."}}},"ContactMessage":{"type":"object","required":["name","email","message"],"properties":{"name":{"type":"string","minLength":1,"description":"Sender's name."},"email":{"type":"string","format":"email","description":"Reply-to email address."},"message":{"type":"string","minLength":1,"description":"The message body."}}}}},"tags":[{"name":"Sales","description":"Talk to the ResidentPrints team."},{"name":"Discovery","description":"Machine-readable resources for agents."}]}