A simple WhatsApp HTTP API built on top of whatsmeow.
Whappy GO is a lightweight HTTP API that wraps whatsmeow, providing a clean and consistent way to interact with WhatsApp.
It makes it easy to send messages, manage instances, and handle groups through RESTful endpoints.
Hey there! Iβm Mauricio Roberto, a Junior Fullstack Developer from Brazil π§π·.
I built Whappy GO as a side project to learn more about Golang (I usually work with Laravel and TypeScript), explore DDD concepts (though Iβll admit, that part didnβt go so well π
),
and, of course, to level up my English β which is still pretty tough for me π©.
- π HTTP Endpoints for WhatsApp β simple and intuitive REST API for message automation.
- π Multi-instance Authentication β manage multiple WhatsApp sessions via QR Code.
- π¬ Messaging Support β send text, images, documents, audio, and more.
- π₯ Group & Contact Management β create, update, and manage groups and contacts.
- β‘ High-performance Core β built with Fiber for fast and efficient HTTP handling.
- ποΈ Database Drivers β support for
sqliteandpostgreswith seamless integration. - π¦ Storage System β choose between
localors3for global automatic media saving, and uploads feature. - π€ Uploads System β enable upload routes for users, store files once, and reference them by upload ID.
- π Cache Layer β
memoryorrediscaching for fast lookups and reduced load. - π€ Upload Cache β configurable cache for WhatsApp server uploads (default: 24 h).
- π§© Flexible Authentication β use instance tokens or impersonate an instance via
ADMIN_TOKEN+X-Instance-IDheader. - π Beautiful Documentation β clear API reference and a polished web interface π.
- π Event Bus System β central event hub with
memoryandredisPub/Sub drivers for flexible events consumption. - πͺ Instance Webhooks β register webhook URLs per instance to receive event notifications with secure HMAC-SHA256 signatures.
View the full API Documentation β proudly made with API Dog.
β Done | π§ In Progress | β Not Started
Note: This endpoints need
Authorizationheader withADMIN_TOKEN.
- β
GET
/admin/instancesβ List all instances. - β
POST
/admin/instancesβ Create a new instance. - β
GET
/admin/instances/{id}β Get instance details. - β PUT
/admin/instances/{id}β Update an instance. - β DELETE
/admin/instances/{id}β Delete an instance. - β
PUT
/admin/instances/{id}/tokenβ Renew a token instance.
Note: All endpoints above here require the
Authorizationheader with the instance token. OR you can sendAuthorizationwithADMIN_TOKEN+X-INSTANCE-IDwith the instance ID.
Endpoints to pair/unpair an whatsapp account.
- β
POST
/session/loginβ Log out the instance (requires authentication to send messages). - β
POST
/session/logoutβ Log out the instance (requires authentication to send messages). - β
GET
/session/qrβ Generate QR code to connect WhatsApp.
Endpoints to connect, disconnect, or check the instance via whatsApp webSocket.
β
POST /session/connect β Connect the WhatsApp server instance (events are now being listened to).
β
POST /session/disconnect β Disconnect the WhatsApp server instance.
β
GET /session/ping β
β GET /users/{jid or lid}/info. β
β GET /users/{jid or lid}/photo β
β GET /users/{jid or lid}/presence β
Endpoints to send messages.
β
GET /messages/id β Generate message IDs whatsapp like, multi id can be generated using ?quantity=8.
β
POST /messages/text β Send text message.
β
POST /messages/image β Send image message.
β
POST /messages/video β Send video message.
β
POST /messages/audio β Send audio message.
β
POST /messages/voice β Send voice message.
β POST /messages/sticker β Send sticker message.
β POST /messages/location β Send location message.
β POST /messages/contact β Send contact message.
β POST /messages/gif β Send gif message.
β POST /messages/poll β Send poll message.
β
POST /messages/reaction β
β
POST /messages/read β Mark messages as read. (many messages supported).
Endpoints to manage contacts.
β
GET /contacts β List all contacts.
β
GET /contacts/{phone or jid} β Get details of a contact.
β
POST /contacts/check β Check if given phone numbers exist on WhatsApp.
Endpoints to manage the blocklist.
β
GET /blocklist β
β
POST /blocklist/{phone or jid} β
β
DELETE /blocklist/{phone or jid} β
Endpoints to manage groups.
β
GET /groups β List joined groups and participants.
β
POST /groups β Create a new group.
β
GET /groups/{id} β Get group info.
β
PATCH /groups/{id} β Update group permissions.
β
DELETE /groups/{id} β Leave group.
β
PATCH /groups/{id}/name β Update group name.
β
PATCH /groups/{id}/description β Update group description.
β
PATCH /groups/{id}/disappearing β Update message disappearing settings.
β
GET /groups/{id}/photo β Get group photo.
β
PUT /groups/{id}/photo β Update group photo.
β
DELETE /groups/{id}/photo β Delete group photo.
β
POST /groups/join β Enter on group.
β
GET /groups/{id}/invite β Get group invite link.
β
DELETE /groups/{id}/invite β Revoke group invite link and return new link.
β
GET /groups/{id}/participants β Get participants.
β
POST /groups/{id}/participants β Add participants.
β
DELETE /groups/{id}/participants β Remove participants.
β
POST /groups/{id}/admins β Promote participants to admin.
β
DELETE /groups/{id}/admins β Demote admins.
Endpoints to manage communities.
β GET /communities β List joined communities and groups with participants.
β POST /communities β Create a new community.
β GET /communities/{id} β Get community info.
β POST /communities/{id}/groups β Links groups.
β DELETE /communities/{id}/groups β Unlinks groups.
Endpoints with utils for chats.
β
POST /chat/presence β Change presence in chat to TYPING/RECORDING/PAUSE.
β PATCH /chat/mute β
β PATCH /chat/pin β
Endpoints to fetch pictures.
β
GET /pictures/{phone or jid} β
Works only if storage is configured. Endpoints to manage uploads, used later when sending messages.
β
GET /uploads β List stored files.
β
POST /uploads β Upload.
β
PUT /uploads/{id} β Update.
β
GET /uploads/{id} β Get.
β
DELETE /uploads/{id} β Delete.
Endpoints to manage status.
β POST /status/text β Create a text status.
β POST /status/image β Create a image status.
β POST /status/audio β Create an audio status.
β POST /status/video β Create a video status.
β GET /download/image β
β GET /download/video β
β GET /download/audio β
β GET /download/sticker β
β GET /download/document β
β
GET /webhooks β Get all webhooks.
β
POST /webhooks β Create a new webhook.
β
GET /webhooks/{id} β Get a specific webhook.
β
PUT /webhooks/{id} β Update a specific webhook.
β
DELETE /webhooks/{id} β Delete a specific webhook.
Here you can list SDKs, libraries, or clients that integrate with Whappy GO.
π§ Whappy GO Laravel SDK β A PHP client built using Saloon for easy integration with Whappy GO. By @mauriciorobertodev
β¨ (Add your own SDK or client here) β e.g., Node.js, Python, Golang, etc.
Show off your projects, tools, or services built with Whappy GO. Feel free to add anything youβve created using the API.
β¨ (Add your project here) β Share what you've built with Whappy GO.
Have questions, ideas, or feedback?
Come chat with us in the Discussions!
You can also:
Contributions are always welcome!
If you donβt have a specific idea in mind, you can look for TODO: comments in the code,
or help improve the documentation, fix bugs, or add new MIME type extensions.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to your branch (
git push origin feature/amazing-feature) - Open a Pull Request
If you find Whappy GO useful, please consider:
- β Starring the repository
- π Reporting bugs
- π‘ Suggesting new features
- π Improving API Docs
- π§βπ» Contributing code
- π§ͺ Create tests
This project is licensed under the MIT License - see the LICENSE file for details.
While building Whappy GO, I studied several resources that helped me structure ideas around architecture, usability, and design patterns.
- Wuzapi inspiration @asternic/wuzapi
- Whatsmeow documentation @tulir/whatsmeow
- Fiber documentation @gofiber/fiber
- SQLX Documentation @jmoiron/sqlx
- Ginkgo documentation @onsi/ginkgo
- Webhook Cool
- Video: Authorization: Domain or Application Layer?
- Video: Domain Driven Design (DDD) in Golang!?
- Video: cursor-based vs offset-based pagination
- Article: Golang Functional Options Pattern
- Article: Webhook security
- Chat GPT