A Brief Guide of SendMammy API

Introduction

Scope

This document aims to describe and provide guidelines in integrating our client's systems to the Send Mammy Service.

Audience

This document is intended for:

  • ChatDaddy Developers; enabling them to quickly learn to integrate and continuously improve the service

  • External third-party developers / organizations; enabling them to use and incorporate service into their own systems

Glossary

Terms

Descriptions

ChatDaddy

The company maintaining and managing the service

WhatsApp

A simple, secure and reliable messaging platform

Swagger

The toolset for API Documentation

Service

The Send Mammy Service

JWT

Json Web Tokens

jid

The user WhatsApp ID and it comes with a format of @s.whatsapp.net

Overview

Send Mammy is the most advanced, feature-rich unofficial API for WhatsApp and developed by ChatDaddy. The Service follows the industry-standard protocol for authorization by using OAuth 2.0 and using JWT for the tokens.

The endpoints are officially documented using Swagger and following the OpenAPI Specification

How to Integrate

  • Get a Token

    A user can get a token by consuming an authentication endpoint from our OAuth service. Before a user can get an access token you must have your username and password registered from the service

Sample Request

curl -X 'POST' \\
  '<https://api-auth.chatdaddy.tech/oauth2/token>' \\
  -H 'accept: application/json' \\
  -H 'Content-Type: application/json' \\
  -d '{
  "username": "string:<your username here>",
  "password": "string:<your password here>",
  "grant_type": "password"
}'

Sample Success Response

{
  "access_token": "string:<access token>",
  "access_token_expiration": number:<access token expiration>,
  "refresh_token": "string:<refresh token>",
  "refresh_token_expiration": number:<refresh token expiration>,
  "tokenType": "Bearer"
}

Sample Error Response

{
  "status": "error",
  "message": "string:<error message description>",
  "code": number:<status code>
}
  • Get WhatsApp Web Connection State

    A user can get the current state of the WhatsApp web connection by consuming the the GET / of the service

Sample Request

curl -X 'GET' \\
  '<https://api.sendmammy.com/>' \\
  -H 'accept: application/json' \\
  -H 'Authorization: Bearer <access token here>'

Sample Success Response

{
  "connections": {
    "phone": false,
    "waWeb": "string:<state of whatsapp web connection>(open|close|connecting)"
  },
  "chats": {
    "hasSome": boolean:<has some chats>,
    "hasLatest": boolean:<has latest chats>
  },
  "canLogin": boolean:<is the user can login to whatsapp web>,
  "user": {
    "jid": "string:<jid>",
    "name": "string:<name of the user>",
    "phone": {
      "wa_version": "string:<whatsapp version",
      "mcc": "string:<mcc>",
      "mnc": "string:<mnc>",
      "os_version": "string:<os version>",
      "device_manufacturer": "string:<device manufacturer>",
      "device_model": "string:<device model>",
      "os_build_number": "string:<os build number>"
    },
    "imgUrl": "string:<profile picture url>"
  },
  "pendingQR": "string:<WhatsApp QR Code Data>",
  "mediaUploadsUrl": "string:<media upload url>",
  "messagesLeft": {
    "count": number:<message limit count>,
    "unlimited": boolean:<is the user's messages is unlimited>
  }
}
  • Open WhatsApp Web Connection

    A user needs to open a WhatsApp Web connection to maximize the use of the Send Mammy service. If the user received a canLogin=true from the Get WhatsApp Web Connection State it will successfully logged in the WhatsApp account to the service. Otherwise, the pendingQR will be seen on Get WhatsApp Web Connection State response. pendingQR is a QR code data that must be used within 20 seconds to generate a QR code for WhatsApp to scan. Once this QR code is successfully scanned from WhatsApp, the user will now be logged in to the service.

Sample Request

curl -X 'POST' \\
  '<https://api.sendmammy.com/open>' \\
  -H 'accept: application/json' \\
  -H 'Authorization: Bearer <access token here>' \\
  -d ''

If the response code returned by the request is 200 , this means that the opening a WhatsApp Web connections is successfully registered.

  • Sending a Message

    After successfully connected the user's WhatsApp account to the service, The user can now send message to it's recipients.

Sample Request (Text Message)

curl -X 'POST' \\
  '<https://api.sendmammy.com/messages/><user jid here>' \\
  -H 'accept: application/json' \\
  -H 'Authorization: Bearer <access token here>' \\
  -H 'Content-Type: application/json' \\
  -d '{
  "jid": "<recipient jid here>",
  "text": "This is a test message",
  "scheduleAt": <can be current unix time or desired schedule of the message to be sent out>,
  "randomizeMessage": true
}'

Sample Response (Text Message)

{
  "key": {
    "remoteJid": "string:<sender jid>",
    "fromMe": boolean:<is from the sender>,
    "id": "string:<message ID>"
  },
  "message": {
    "extendedTextMessage": {
      "text": "This is a test message"
    }
  },
  "messageTimestamp": {
    "low": 1618311227,
    "high": 0,
    "unsigned": true
  },
  "status": 1,
  "scheduled": true,
  "senderUserId": "string:<sender user id>"
}

Sample Request (Media Message)

curl -X 'POST' \\
  '<https://api.sendmammy.com/messages/><user jid here>' \\
  -H 'accept: application/json' \\
  -H 'Authorization: Bearer <access token here>' \\
  -H 'Content-Type: application/json' \\
  -d '{
  "jid": "<recipient jid here>",
  "image": {
    "url": "<image url>",
    "mimetype": "<image mime type>",
    "name": "<image name>"
  },
  "scheduleAt": 1618312071,
  "withTyping": true,
  "randomizeMessage": true
}'

Sample Response (Media Message)

{
  "key": {
    "remoteJid": "string:<sender jid>",
    "fromMe": boolean:<is from the sender>,
    "id": "string:<message ID>"
  },
  "message": {
    "imageMessage": {
      "url": "string:<.enc image url>",
      "mimetype": "img/jpg",
      "fileSha256": {
        "type": "Buffer",
        "data": [<buffer data>]
      },
      "fileLength": {
        "low": 187360,
        "high": 0,
        "unsigned": true
      },
      "mediaKey": {
        "type": "Buffer",
        "data": [<buffer data>]
      },
      "fileEncSha256": {
        "type": "Buffer",
        "data": [<buffer data>]
      }
    }
  },
  "messageTimestamp": {
    "low": 1618312071,
    "high": 0,
    "unsigned": true
  },
  "status": 1,
  "scheduled": true,
  "withTyping": true,
  "senderUserId": "string:<sender user id>"
}

Sample Request (Contact)

curl -X 'POST' \\
  '<https://api.sendmammy.com/messages/><user jid here>' \\
  -H 'accept: application/json' \\
  -H 'Authorization: Bearer <access token here>' \\
  -H 'Content-Type: application/json' \\
  -d '{
  "jid": "<recipient jid here>",
  "contacts": [
	{
	    "displayName": "<Contact Name>",
	    "phoneNumber": "<Contact Phone Number>"
	}
  ],
  "scheduleAt": 1618312684,
  "withTyping": true,
  "randomizeMessage": false
}'

Sample Response (Contact)

{
  "key": {
    "remoteJid": "string:<sender jid>",
    "fromMe": boolean:<is from the sender>,
    "id": "string:<message ID>"
  },
  "message": {},
  "messageTimestamp": {
    "low": 1618312684,
    "high": 0,
    "unsigned": true
  },
  "status": 1,
  "scheduled": true,
  "withTyping": true,
  "senderUserId": "string:<sender user id>"
}

Sample Request (Location)

curl -X 'POST' \\
  '<https://api.sendmammy.com/messages/><user jid here>' \\
  -H 'accept: application/json' \\
  -H 'Authorization: Bearer <access token here>' \\
  -H 'Content-Type: application/json' \\
  -d '{
  "jid": "<recipient jid here>",
  "location": {
    "degreesLongitude": 53.2734,
    "degreesLatitude": -7.77832031
  },
  "scheduleAt": 1618311554,
  "withTyping": true,
  "randomizeMessage": true
}'

Sample Response (Location)

{
  "key": {
    "remoteJid": "string:<sender jid>",
    "fromMe": boolean:<is from the sender>,
    "id": "string:<message ID>"
  },
  "message": {
    "locationMessage": {
      "degreesLatitude": -7.77832031,
      "degreesLongitude": 53.2734
    }
  },
  "messageTimestamp": {
    "low": 1618311554,
    "high": 0,
    "unsigned": true
  },
  "status": 1,
  "scheduled": true,
  "withTyping": true,
  "senderUserId": "string:<sender user id>"
}

Are you excited to do an Advance Integration?

We are excited to hear that from you! You can explore more about the service by using our official API documentation.

Basic Guide to Continuosly Explore

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a627957f-40bc-4a39-ac16-1593c11e999d/Untitled.png
  • The Server selected must be https://api.sendmammy.com/

  • To prevent getting Unauthorized Request, kindly ensure that you have clicked the Authorize button on the right

  • Upon clicking the Authorize button, the documentation will prompt an authorization modal like the image below:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f23dfe95-822f-4114-9d95-33142ba95971/Untitled.png
  • The user must fill up a valid username and password and just click the Authorize button on the bottom part of the modal.

  • client_id & client_secret can be blank

  • The user can verify a successful authorization request by seeing if the lock icon is locked

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/38fd696e-8a13-4514-9e8f-c11bbac44479/Untitled.png
  • The user can now request to all the endpoints of the service

  • NOTE: Don't forget to read the descriptions on the endpoint, parameters, request objects, and response objects for better understanding. If you have any concerns, please don't hesitate to contact our sales representative or support team.

Last updated

Was this helpful?