# Replyr.ai > Replyr.ai (Replyr Sdn Bhd, Kuala Lumpur, Malaysia) is an AI customer-engagement > and patient-acquisition platform for clinics. It runs GPT-style chat assistants > that reply across WhatsApp, Instagram, Facebook Messenger and other chat > channels to qualify leads, answer questions, recommend products and book > appointments, packaged with Meta/Google ad campaigns and the BookAClinic > discovery marketplace. The operator console at app.replyr.ai exposes a REST API > of 65 operations, documented with Swagger UI and a Swagger 2.0 specification. Generated by API Evangelist on 2026-08-13. Replyr does not publish an llms.txt of its own (https://replyr.ai/llms.txt returns 404), so this file is generated from the provider's published Swagger 2.0 document and from live probes. It is a third-party description, not a Replyr publication. ## API basics - Base URL: https://app.replyr.ai/api - Reference: https://app.replyr.ai/api (Swagger UI 3.16.0) - Specification: Swagger 2.0, info.version 1.1, 48 paths, 65 operations, 8 tags - Authentication: API key in the `X-ACCESS-TOKEN` request header, issued from the operator console. Applied globally - every operation requires it. No OAuth, no scopes, no bearer tokens. - Versioning: none. No version segment in the path, no version header. - Pagination: `offset` / `limit` query parameters on three operations only (getPipelines, pipelinesGetCards, pipelinesGetComments). Collections wrap results in a top-level `data` array. - Errors: vendor envelope `{"error":{"code":,"message":}}`, served with Content-Type `text/html`. Not RFC 9457. No symbolic error codes. - Rate limits: none documented, no rate-limit headers observed, no 429 declared. - Idempotency: not supported. Retrying a messaging or payment write can duplicate a real-world side effect. - Webhooks / events: none published. No AsyncAPI, no callbacks. - MCP server: Replyr does not ship one. (The API's GET /agents/mcp lists MCP connections a *customer* configures for their own AI agents inside Replyr.) ## Operation surface ### Accounts (18 operations) - getAccountInformation - GET /accounts/me - business account details - getAccountAdmins - GET /accounts/admins - getAccountTeams - GET /accounts/teams - getAccountTags - GET /accounts/tags - createTag - POST /accounts/tags - getTagById - GET /accounts/tags/{tag_id} - getTagByName - GET /accounts/tags/name/{tag_name} - deleteTag - DELETE /accounts/tags/{tag_id} - getAccountFlows - GET /accounts/flows - getAccountCustomFields - GET /accounts/custom_fields - createCustomField - POST /accounts/custom_fields - getCustomFieldById - GET /accounts/custom_fields/{custom_field_id} - getCustomFieldByName - GET /accounts/custom_fields/name/{custom_field_name} - getBFieldValue - GET /accounts/bot_fields/{bot_field_id} - setBField - POST /accounts/bot_fields/{bot_field_id} - removeBField - DELETE /accounts/bot_fields/{bot_field_id} - getAccountIntegrations - GET /accounts/integrations - generateTemplateLink - POST /accounts/templates/{template_id}/generateSingleUseLink ### Contacts (15 operations) - createNewContact - POST /contacts - create from a phone number, with optional inline actions (add_tag, set_field_value, send_flow) - getUserByName - GET /contacts/{contact_id} - findByCustomField - GET /contacts/find_by_custom_field - look up by custom field value; pass `phone` or `email` as field_id to find by phone or email. Returns at most 100 contacts, no pagination. - getUserTags - GET /contacts/{contact_id}/tags - addTagToUser - POST /contacts/{contact_id}/tags/{tag_id} - removeTagFromUser - DELETE /contacts/{contact_id}/tags/{tag_id} - getUserFields - GET /contacts/{contact_id}/custom_fields - getFieldValue - GET /contacts/{contact_id}/custom_fields/{custom_field_id} - addFieldToUser - POST /contacts/{contact_id}/custom_fields/{custom_field_id} - removeFieldFromUser - DELETE /contacts/{contact_id}/custom_fields/{custom_field_id} - sendTextMessage - POST /contacts/{contact_id}/send/text - sendFile - POST /contacts/{contact_id}/send/file - sendFlowToUser - POST /contacts/{contact_id}/send/{flow_id} - sendContent - POST /contacts/{contact_id}/send_content - multiple actions and messages in one call, works across all channels - aiSaveMessages - POST /contacts/{contact_id}/ai/save_messages - append to the contact's AI message history ### Pipelines (13 operations) - getPipelines - GET /pipelines (offset/limit) - getPipeline - GET /pipelines/{pipeline_id} - getPipelineStages - GET /pipelines/{pipeline_id}/stages - getPipelineCustomFields - GET /pipelines/{pipeline_id}/custom_fields - pipelinesGetCards - GET /pipelines/{pipeline_id}/opportunities (offset/limit) - pipelinesAddCard - POST /pipelines/{pipeline_id}/opportunities - pipelinesGetCard - GET /pipelines/{pipeline_id}/opportunities/{opportunity_id} - pipelinesUpdateCard - POST /pipelines/{pipeline_id}/opportunities/{opportunity_id} - pipelinesDeleteCard - DELETE /pipelines/{pipeline_id}/opportunities/{opportunity_id} - pipelinesTransferCard - POST .../transfer-to-pipeline - pipelinesGetComments - GET .../comments (offset/limit) - pipelinesAddComment - POST .../comments - pipelinesDeleteComment - DELETE .../comments/{comment_id} ### AI Agents (6 operations) - getAIAgents - GET /agents/ (max 100, no pagination) - getAIById - GET /agents/{agent_id} - updateAIById - POST /agents/{agent_id} - getAIFunctions - GET /agents/functions - getAIMCPs - GET /agents/mcp - getAIFiles - GET /agents/files ### Appointment Management (2 operations) - getCalendars - GET /calendars - getProductById - GET /calendars/{calendar_id} - NOTE: the provider reuses the operationId getProductById here and on GET /products/{product_id}. It is a duplicate in the published contract. ### Templates (1 operation) - installTemplate - POST /accounts/templates/{template_id}/install ### Ecommerce (10 operations) - sendProduct - POST /contacts/{contact_id}/send/products - getUserCart - GET /contacts/{contact_id}/cart - addProductCart - POST /contacts/{contact_id}/cart/{product_id} - removeProductCart - DELETE /contacts/{contact_id}/cart/{product_id} - clearUserCart - DELETE /contacts/{contact_id}/cart - getUserOrder - GET /contacts/{contact_id}/order/{order_id} - changeOrder - POST /contacts/{contact_id}/order/{order_id} - payOrder - POST /contacts/{contact_id}/pay/{order_id} - amount_received in cents - getProductById - GET /products/{product_id} - updateProduct - POST /products/{product_id} ## Data model Account is the tenant root (`page_id` is the tenant key). Contact is the hub - 21 of 65 operations are addressed by `contact_id`. Entities: Account, Contact, Tag, Custom_field, Admin, Team, Pipeline, PipelineStage, Opportunity, OpportunityComment, Agent, Calendar, Appointment, Product, ProductCart, Cart, Order. Identifiers are bare integers with no type prefix (Order.id and Cart.order_id are strings). Appointment is defined in the schema but reachable through no published operation - there is no endpoint to list, create, reschedule or cancel an appointment, even though appointment booking is the product's headline use case. Flows, bot fields, integrations, templates and the AI function/MCP/file lists have operations but no published schema. ## What Replyr does NOT publish - No pricing tiers. The homepage #pricing section is a "Qualify My Clinic" lead form; https://app.replyr.ai/en/register returns 404. Contact sales only. - No terms of service or privacy policy at a working URL. - No status page, SLA, changelog, deprecation policy or versioning policy. - No SDK or client library in any public registry. - No CLI, no Postman collection, no sandbox or test credentials. - No /.well-known/ documents - 16 paths probed across 2 hosts, all 404. - No A2A agent card, no MCP server, no AsyncAPI, no webhooks. - No compliance page, trust center or named certification. Notable given the healthcare context: the product moves patient enquiries through WhatsApp. ## Links - Website: https://replyr.ai - API reference: https://app.replyr.ai/api - Console login: https://app.replyr.ai/en/login - Support (WhatsApp): https://wa.me/60109696912 - API Evangelist profile: https://apis.io/provider/replyrai