# Create Plant Source: https://docs.whatsable.app/api-reference/endpoint/create POST /plants Create a new plant via the API. # Delete Plant Source: https://docs.whatsable.app/api-reference/endpoint/delete DELETE /plants/{id} Delete a plant by ID. # Get Plants Source: https://docs.whatsable.app/api-reference/endpoint/get GET /plants Retrieve a list of plants from the API. # New Plant Source: https://docs.whatsable.app/api-reference/endpoint/webhook WEBHOOK /plant/webhook Webhook endpoint for plant-related events. # API Reference Source: https://docs.whatsable.app/api-reference/introduction WhatsAble API documentation — RESTful APIs for WhatsApp messaging. Choose WhatsAble or Notifyer System. Build WhatsApp-powered workflows with WhatsAble's suite of APIs. Whether you're a developer integrating via REST or a business user connecting through Zapier, Make, or n8n — we've got you covered. ## Choose your API Select the WhatsAble product that matches your use case. Each API has distinct capabilities and authentication. ### WhatsAble
WhatsAble

Internal team messaging and business alerts. Unlimited WhatsApp messages with Zapier and Make integration.

POST Send WhatsApp messages with optional attachments
### Notifyer System
Notifyer System

Full business messaging platform with real-time chat, brand messaging, and two-way communication.

GET Retrieve all templates for your account
POST Send template-based messages to users
## Why WhatsAble Official WhatsApp Business API integration backed by Meta's technology partner approval. Send customized messages in real-time with webhooks and event-driven workflows. REST APIs for custom integrations, plus ready-made connectors for Zapier, Make, and n8n. Alerts, confirmations, reminders, and team updates — all over WhatsApp. ## Connect your way Integrate through no-code automation platforms or call our APIs directly. Connect 6,000+ apps with pre-built Zaps. No coding required.
WhatsAble · Notifyer System
Build visual automation scenarios with drag-and-drop workflows.
WhatsAble · Notifyer System
Self-hosted or cloud workflows with full control over your automation.
WhatsAble · Notifyer System
RESTful endpoints with API keys. Full programmatic access for custom integrations.
WhatsAble · Notifyer System
## Get started Choose [WhatsAble](https://dashboard.whatsable.app/signup) or [Notifyer System](https://console.notifyer-systems.com/) based on your messaging needs. Get your API key from the dashboard. See [Authentication](/authentication) for header format and request examples. Use our API endpoints or follow the Zapier, Make, or n8n guides for no-code setup. **Security:** Never expose API keys in client-side code or public repositories. Use environment variables and server-side requests only. # Get Templates Source: https://docs.whatsable.app/api-reference/notifier-system/templates/get-templates /openapi/notifier-system-api.json get /api:AFRA_QCy/get_templates Retrieve a list of all templates associated with your account # Send Template Message Source: https://docs.whatsable.app/api-reference/notifier-system/templates/send-template-message /openapi/notifier-system-api.json post /api:hFrjh8a1/send_template_message_by_api Send a template-based message to users via their phone numbers # Send a WhatsApp message Source: https://docs.whatsable.app/api-reference/whatsable/messages/send-a-whatsapp-message /openapi/whatsable-api.json post /send Send a WhatsApp message with optional attachments (images, videos, documents) # Authentication Source: https://docs.whatsable.app/authentication Authenticate with WhatsAble APIs using API keys, Bearer tokens, and request headers. # Authentication All WhatsAble APIs require authentication using API keys. This guide explains how to authenticate your requests. ## API Keys Each API solution uses a different authentication method: ### WhatsAble API Uses an API key in the `X-API-Key` header: ```bash theme={null} curl -X POST https://api.whatsable.app/v1/messages \ -H "X-API-Key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"to": "+1234567890", "message": "Hello!"}' ``` ### Notifyer System Uses a Bearer token in the Authorization header: ```bash theme={null} curl -X POST https://api.insightssystem.com/api:hFrjh8a1/send_template_message_by_api \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"template": "template_id", "variables": {}, "phone_number": "+1234567890"}' ``` ## Getting Your API Keys 1. Log in to your WhatsAble dashboard 2. Navigate to the API section 3. Generate a new API key or token 4. Store it securely - it won't be shown again! ## Security Best Practices * Never share your API keys * Use environment variables to store keys * Rotate keys periodically * Use HTTPS for all API requests * Implement proper error handling # Development Source: https://docs.whatsable.app/development Preview changes locally to update your docs **Prerequisite**: Please install Node.js (version 19 or higher) before proceeding.
Please upgrade to `docs.json` before proceeding and delete the legacy `mint.json` file.
Follow these steps to install and run Mintlify on your operating system: **Step 1**: Install Mintlify: ```bash npm theme={null} npm i -g mintlify ``` ```bash yarn theme={null} yarn global add mintlify ``` **Step 2**: Navigate to the docs directory (where the `docs.json` file is located) and execute the following command: ```bash theme={null} mintlify dev ``` A local preview of your documentation will be available at `http://localhost:3000`. ### Custom Ports By default, Mintlify uses port 3000. You can customize the port Mintlify runs on by using the `--port` flag. To run Mintlify on port 3333, for instance, use this command: ```bash theme={null} mintlify dev --port 3333 ``` If you attempt to run Mintlify on a port that's already in use, it will use the next available port: ```md theme={null} Port 3000 is already in use. Trying 3001 instead. ``` ## Mintlify Versions Please note that each CLI release is associated with a specific version of Mintlify. If your local website doesn't align with the production version, please update the CLI: ```bash npm theme={null} npm i -g mintlify@latest ``` ```bash yarn theme={null} yarn global upgrade mintlify ``` ## Validating Links The CLI can assist with validating reference links made in your documentation. To identify any broken links, use the following command: ```bash theme={null} mintlify broken-links ``` ## Deployment Unlimited editors available under the [Pro Plan](https://mintlify.com/pricing) and above. If the deployment is successful, you should see the following: ## Code Formatting We suggest using extensions on your IDE to recognize and format MDX. If you're a VSCode user, consider the [MDX VSCode extension](https://marketplace.visualstudio.com/items?itemName=unifiedjs.vscode-mdx) for syntax highlighting, and [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) for code formatting. ## Troubleshooting This may be due to an outdated version of node. Try the following: 1. Remove the currently-installed version of mintlify: `npm remove -g mintlify` 2. Upgrade to Node v19 or higher. 3. Reinstall mintlify: `npm install -g mintlify` Solution: Go to the root of your device and delete the \~/.mintlify folder. Afterwards, run `mintlify dev` again. Curious about what changed in the CLI version? [Check out the CLI changelog.](https://www.npmjs.com/package/mintlify?activeTab=versions) # Code Blocks Source: https://docs.whatsable.app/essentials/code Display inline code and code blocks ## Basic ### Inline Code To denote a `word` or `phrase` as code, enclose it in backticks (\`). ``` To denote a `word` or `phrase` as code, enclose it in backticks (`). ``` ### Code Block Use [fenced code blocks](https://www.markdownguide.org/extended-syntax/#fenced-code-blocks) by enclosing code in three backticks and follow the leading ticks with the programming language of your snippet to get syntax highlighting. Optionally, you can also write the name of your code after the programming language. ```java HelloWorld.java theme={null} class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` ````md theme={null} ```java HelloWorld.java class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` ```` # Images and Embeds Source: https://docs.whatsable.app/essentials/images Add image, video, and other HTML elements ## Image ### Using Markdown The [markdown syntax](https://www.markdownguide.org/basic-syntax/#images) lets you add images using the following code ```md theme={null} ![title](/path/image.jpg) ``` Note that the image file size must be less than 5MB. Otherwise, we recommend hosting on a service like [Cloudinary](https://cloudinary.com/) or [S3](https://aws.amazon.com/s3/). You can then use that URL and embed. ### Using Embeds To get more customizability with images, you can also use [embeds](/writing-content/embed) to add images ```html theme={null} ``` ## Embeds and HTML elements ``` # Markdown Syntax Source: https://docs.whatsable.app/essentials/markdown Text, title, and styling in standard markdown ## Titles Best used for section headers. ```md theme={null} ## Titles ``` ### Subtitles Best use to subsection headers. ```md theme={null} ### Subtitles ``` Each **title** and **subtitle** creates an anchor and also shows up on the table of contents on the right. ## Text Formatting We support most markdown formatting. Simply add `**`, `_`, or `~` around text to format it. | Style | How to write it | Result | | ------------- | ----------------- | ----------------- | | Bold | `**bold**` | **bold** | | Italic | `_italic_` | *italic* | | Strikethrough | `~strikethrough~` | ~~strikethrough~~ | You can combine these. For example, write `**_bold and italic_**` to get ***bold and italic*** text. You need to use HTML to write superscript and subscript text. That is, add `` or `` around your text. | Text Size | How to write it | Result | | ----------- | ------------------------ | ---------------------- | | Superscript | `superscript` | superscript | | Subscript | `subscript` | subscript | ## Linking to Pages You can add a link by wrapping text in `[]()`. You would write `[link to google](https://google.com)` to [link to google](https://google.com). Links to pages in your docs need to be root-relative. Basically, you should include the entire folder path. For example, `[link to text](/writing-content/text)` links to the page "Text" in our components section. Relative links like `[link to text](../text)` will open slower because we cannot optimize them as easily. ## Blockquotes ### Singleline To create a blockquote, add a `>` in front of a paragraph. > Dorothy followed her through many of the beautiful rooms in her castle. ```md theme={null} > Dorothy followed her through many of the beautiful rooms in her castle. ``` ### Multiline > Dorothy followed her through many of the beautiful rooms in her castle. > > The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood. ```md theme={null} > Dorothy followed her through many of the beautiful rooms in her castle. > > The Witch bade her clean the pots and kettles and sweep the floor and keep the fire fed with wood. ``` ### LaTeX Mintlify supports [LaTeX](https://www.latex-project.org) through the Latex component. 8 x (vk x H1 - H2) = (0,1) ```md theme={null} 8 x (vk x H1 - H2) = (0,1) ``` # Navigation Source: https://docs.whatsable.app/essentials/navigation The navigation field in docs.json defines the pages that go in the navigation menu The navigation menu is the list of links on every website. You will likely update `docs.json` every time you add a new page. Pages do not show up automatically. ## Navigation syntax Our navigation syntax is recursive which means you can make nested navigation groups. You don't need to include `.mdx` in page names. ```json Regular Navigation theme={null} "navigation": { "tabs": [ { "tab": "Docs", "groups": [ { "group": "Getting Started", "pages": ["quickstart"] } ] } ] } ``` ```json Nested Navigation theme={null} "navigation": { "tabs": [ { "tab": "Docs", "groups": [ { "group": "Getting Started", "pages": [ "quickstart", { "group": "Nested Reference Pages", "pages": ["nested-reference-page"] } ] } ] } ] } ``` ## Folders Simply put your MDX files in folders and update the paths in `docs.json`. For example, to have a page at `https://yoursite.com/your-folder/your-page` you would make a folder called `your-folder` containing an MDX file called `your-page.mdx`. You cannot use `api` for the name of a folder unless you nest it inside another folder. Mintlify uses Next.js which reserves the top-level `api` folder for internal server calls. A folder name such as `api-reference` would be accepted. ```json Navigation With Folder theme={null} "navigation": { "tabs": [ { "tab": "Docs", "groups": [ { "group": "Group Name", "pages": ["your-folder/your-page"] } ] } ] } ``` ## Hidden Pages MDX files not included in `docs.json` will not show up in the sidebar but are accessible through the search bar and by linking directly to them. # Reusable Snippets Source: https://docs.whatsable.app/essentials/reusable-snippets Reusable, custom snippets to keep content in sync One of the core principles of software development is DRY (Don't Repeat Yourself). This is a principle that apply to documentation as well. If you find yourself repeating the same content in multiple places, you should consider creating a custom snippet to keep your content in sync. ## Creating a custom snippet **Pre-condition**: You must create your snippet file in the `snippets` directory. Any page in the `snippets` directory will be treated as a snippet and will not be rendered into a standalone page. If you want to create a standalone page from the snippet, import the snippet into another file and call it as a component. ### Default export 1. Add content to your snippet file that you want to re-use across multiple locations. Optionally, you can add variables that can be filled in via props when you import the snippet. ```mdx snippets/my-snippet.mdx theme={null} Hello world! This is my content I want to reuse across pages. My keyword of the day is {word}. ``` The content that you want to reuse must be inside the `snippets` directory in order for the import to work. 2. Import the snippet into your destination file. ```mdx destination-file.mdx theme={null} --- title: My title description: My Description --- import MySnippet from '/snippets/path/to/my-snippet.mdx'; ## Header Lorem impsum dolor sit amet. ``` ### Reusable variables 1. Export a variable from your snippet file: ```mdx snippets/path/to/custom-variables.mdx theme={null} export const myName = 'my name'; export const myObject = { fruit: 'strawberries' }; ``` 2. Import the snippet from your destination file and use the variable: ```mdx destination-file.mdx theme={null} --- title: My title description: My Description --- import { myName, myObject } from '/snippets/path/to/custom-variables.mdx'; Hello, my name is {myName} and I like {myObject.fruit}. ``` ### Reusable components 1. Inside your snippet file, create a component that takes in props by exporting your component in the form of an arrow function. ```mdx snippets/custom-component.mdx theme={null} export const MyComponent = ({ title }) => (

{title}

... snippet content ...

); ``` MDX does not compile inside the body of an arrow function. Stick to HTML syntax when you can or use a default export if you need to use MDX. 2. Import the snippet into your destination file and pass in the props ```mdx destination-file.mdx theme={null} --- title: My title description: My Description --- import { MyComponent } from '/snippets/custom-component.mdx'; Lorem ipsum dolor sit amet. ``` # Global Settings Source: https://docs.whatsable.app/essentials/settings Mintlify gives you complete control over the look and feel of your documentation using the docs.json file Every Mintlify site needs a `docs.json` file with the core configuration settings. Learn more about the [properties](#properties) below. ## Properties Name of your project. Used for the global title. Example: `mintlify` An array of groups with all the pages within that group The name of the group. Example: `Settings` The relative paths to the markdown files that will serve as pages. Example: `["customization", "page"]` Path to logo image or object with path to "light" and "dark" mode logo images Path to the logo in light mode Path to the logo in dark mode Where clicking on the logo links you to Path to the favicon image Hex color codes for your global theme The primary color. Used for most often for highlighted content, section headers, accents, in light mode The primary color for dark mode. Used for most often for highlighted content, section headers, accents, in dark mode The primary color for important buttons The color of the background in both light and dark mode The hex color code of the background in light mode The hex color code of the background in dark mode Array of `name`s and `url`s of links you want to include in the topbar The name of the button. Example: `Contact us` The url once you click on the button. Example: `https://mintlify.com/docs` Link shows a button. GitHub shows the repo information at the url provided including the number of GitHub stars. If `link`: What the button links to. If `github`: Link to the repository to load GitHub information from. Text inside the button. Only required if `type` is a `link`. Array of version names. Only use this if you want to show different versions of docs with a dropdown in the navigation bar. An array of the anchors, includes the `icon`, `color`, and `url`. The [Font Awesome](https://fontawesome.com/search?q=heart) icon used to feature the anchor. Example: `comments` The name of the anchor label. Example: `Community` The start of the URL that marks what pages go in the anchor. Generally, this is the name of the folder you put your pages in. The hex color of the anchor icon background. Can also be a gradient if you pass an object with the properties `from` and `to` that are each a hex color. Used if you want to hide an anchor until the correct docs version is selected. Pass `true` if you want to hide the anchor until you directly link someone to docs inside it. One of: "brands", "duotone", "light", "sharp-solid", "solid", or "thin" Override the default configurations for the top-most anchor. The name of the top-most anchor Font Awesome icon. One of: "brands", "duotone", "light", "sharp-solid", "solid", or "thin" An array of navigational tabs. The name of the tab label. The start of the URL that marks what pages go in the tab. Generally, this is the name of the folder you put your pages in. Configuration for API settings. Learn more about API pages at [API Components](/api-playground/demo). The base url for all API endpoints. If `baseUrl` is an array, it will enable for multiple base url options that the user can toggle. The authentication strategy used for all API endpoints. The name of the authentication parameter used in the API playground. If method is `basic`, the format should be `[usernameName]:[passwordName]` The default value that's designed to be a prefix for the authentication input field. E.g. If an `inputPrefix` of `AuthKey` would inherit the default input result of the authentication field as `AuthKey`. Configurations for the API playground Whether the playground is showing, hidden, or only displaying the endpoint with no added user interactivity `simple` Learn more at the [playground guides](/api-playground/demo) Enabling this flag ensures that key ordering in OpenAPI pages matches the key ordering defined in the OpenAPI file. This behavior will soon be enabled by default, at which point this field will be deprecated. A string or an array of strings of URL(s) or relative path(s) pointing to your OpenAPI file. Examples: ```json Absolute theme={null} "openapi": "https://example.com/openapi.json" ``` ```json Relative theme={null} "openapi": "/openapi.json" ``` ```json Multiple theme={null} "openapi": ["https://example.com/openapi1.json", "/openapi2.json", "/openapi3.json"] ``` An object of social media accounts where the key:property pair represents the social media platform and the account url. Example: ```json theme={null} { "x": "https://x.com/mintlify", "website": "https://mintlify.com" } ``` One of the following values `website`, `facebook`, `x`, `discord`, `slack`, `github`, `linkedin`, `instagram`, `hacker-news` Example: `x` The URL to the social platform. Example: `https://x.com/mintlify` Configurations to enable feedback buttons Enables a button to allow users to suggest edits via pull requests Enables a button to allow users to raise an issue about the documentation Customize the dark mode toggle. Set if you always want to show light or dark mode for new users. When not set, we default to the same mode as the user's operating system. Set to true to hide the dark/light mode toggle. You can combine `isHidden` with `default` to force your docs to only use light or dark mode. For example: ```json Only Dark Mode theme={null} "modeToggle": { "default": "dark", "isHidden": true } ``` ```json Only Light Mode theme={null} "modeToggle": { "default": "light", "isHidden": true } ``` A background image to be displayed behind every page. See example with [Infisical](https://infisical.com/docs) and [FRPC](https://frpc.io). # Error Handling Source: https://docs.whatsable.app/guides/error-handling Handle errors when using WhatsAble APIs: HTTP status codes, error format, and retry strategies. # Error Handling This guide explains how to handle errors when using WhatsAble APIs. ## HTTP Status Codes All WhatsAble APIs use standard HTTP status codes: * `200 OK`: Request successful * `400 Bad Request`: Invalid request parameters * `401 Unauthorized`: Invalid or missing API key * `403 Forbidden`: Insufficient permissions * `404 Not Found`: Resource not found * `429 Too Many Requests`: Rate limit exceeded * `500 Internal Server Error`: Server-side error ## Error Response Format All error responses follow this format: ```json theme={null} { "error": { "code": "error_code", "message": "Human-readable error message" } } ``` ## Common Error Codes ### Authentication Errors * `invalid_api_key`: API key is invalid or expired * `missing_api_key`: API key is missing from request ### Request Errors * `invalid_phone_number`: Phone number format is incorrect * `invalid_template`: Template ID is invalid or not found * `missing_required_field`: Required field is missing * `invalid_variables`: Template variables are invalid ### Rate Limit Errors * `rate_limit_exceeded`: Too many requests in a time period * `quota_exceeded`: Monthly quota exceeded ## Best Practices 1. **Always Check Status Codes**: Don't assume success 2. **Implement Retry Logic**: For 429 and 500 errors 3. **Log Errors**: For debugging and monitoring 4. **Handle Timeouts**: Set appropriate timeout values 5. **Validate Input**: Before making API calls ## Example Error Handling ```javascript theme={null} async function sendMessage() { try { const response = await fetch('https://api.insightssystem.com/api:hFrjh8a1/send_template_message_by_api', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_TOKEN' }, body: JSON.stringify({ template: 'template_id', variables: {}, phone_number: '+1234567890' }) }); if (!response.ok) { const error = await response.json(); throw new Error(error.error.message); } const data = await response.json(); return data; } catch (error) { console.error('Error sending message:', error); // Handle error appropriately } } ``` # Embedding Process Source: https://docs.whatsable.app/guides/notifier-system/embedding-process Connect your WhatsApp Business Account to the Notifyer System to enable automated messaging capabilities # WhatsApp Business Account Integration