curl --request PATCH \
--url https://api.wppfy.com/quick-replies/{id} \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"shortCut": "endereco-centro"
}
'import requests
url = "https://api.wppfy.com/quick-replies/{id}"
payload = { "shortCut": "endereco-centro" }
headers = {
"token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {token: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({shortCut: 'endereco-centro'})
};
fetch('https://api.wppfy.com/quick-replies/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wppfy.com/quick-replies/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'shortCut' => 'endereco-centro'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.wppfy.com/quick-replies/{id}"
payload := strings.NewReader("{\n \"shortCut\": \"endereco-centro\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.wppfy.com/quick-replies/{id}")
.header("token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"shortCut\": \"endereco-centro\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wppfy.com/quick-replies/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"shortCut\": \"endereco-centro\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"shortCut": "<string>",
"aiDescription": "<string>",
"onWhatsApp": true,
"message": {
"kind": "location",
"name": "Loja Centro",
"address": "Av. Paulista, 1000",
"latitude": -23.5614,
"longitude": -46.6559
},
"createdAt": "<string>",
"updatedAt": "<string>"
}{
"error": "temperature must be between 0 and 2",
"code": "validation_failed"
}{
"code": 401,
"message": "Invalid token.",
"data": {}
}{
"error": "temperature must be between 0 and 2",
"code": "validation_failed"
}{
"error": "temperature must be between 0 and 2",
"code": "validation_failed"
}{
"error": "temperature must be between 0 and 2",
"code": "validation_failed"
}{
"error": "temperature must be between 0 and 2",
"code": "validation_failed"
}Edit quick reply
Changes only the fields sent. message replaces the entire message; replacing or removing a file deletes the previous one. If another edit replaces the message at the same time, this one returns 409 with conflict and nothing is saved. Replies in WhatsApp Business remain text-only.
curl --request PATCH \
--url https://api.wppfy.com/quick-replies/{id} \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"shortCut": "endereco-centro"
}
'import requests
url = "https://api.wppfy.com/quick-replies/{id}"
payload = { "shortCut": "endereco-centro" }
headers = {
"token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {token: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({shortCut: 'endereco-centro'})
};
fetch('https://api.wppfy.com/quick-replies/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wppfy.com/quick-replies/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'shortCut' => 'endereco-centro'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.wppfy.com/quick-replies/{id}"
payload := strings.NewReader("{\n \"shortCut\": \"endereco-centro\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.wppfy.com/quick-replies/{id}")
.header("token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"shortCut\": \"endereco-centro\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wppfy.com/quick-replies/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"shortCut\": \"endereco-centro\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"shortCut": "<string>",
"aiDescription": "<string>",
"onWhatsApp": true,
"message": {
"kind": "location",
"name": "Loja Centro",
"address": "Av. Paulista, 1000",
"latitude": -23.5614,
"longitude": -46.6559
},
"createdAt": "<string>",
"updatedAt": "<string>"
}{
"error": "temperature must be between 0 and 2",
"code": "validation_failed"
}{
"code": 401,
"message": "Invalid token.",
"data": {}
}{
"error": "temperature must be between 0 and 2",
"code": "validation_failed"
}{
"error": "temperature must be between 0 and 2",
"code": "validation_failed"
}{
"error": "temperature must be between 0 and 2",
"code": "validation_failed"
}{
"error": "temperature must be between 0 and 2",
"code": "validation_failed"
}Authorizations
Path Parameters
Quick reply ID.
Body
On creation, shortCut and message are required. On edit, only the fields sent change; message replaces the entire message.
Shortcut to find the reply (and what the AI uses to choose).
Reserved for automated support. Empty by default.
Only on creation and only with kind: text: also creates it in WhatsApp Business.
Stored message: kind plus the same body as the corresponding send, without number and without send fields (replyid, mentions, delay, readchat, readmessages, async, forward, track_source, track_id).
| kind | Body same as | Note |
|---|---|---|
text | text | Accepts placeholders such as {{name}}. |
media | /send/media: type, file, text, docName | type: image, video, document, audio, ptt or myaudio. A file by URL is kept as sent; in base64, it is stored by the API (image 5 MB, audio and video 16 MB, document 20 MB; 50 MB per instance). |
contact | /send/contact | fullName and phoneNumber required. |
location | /send/location | latitude and longitude required. |
menu | /send/menu | type: button, button_legacy, list or poll (carousel not yet). The button media (file) only by URL. The options must be sendable, otherwise 400: poll with at least 2, list with at least one item (a [...] section does not count) and buttons with at least 1. |
pix | /send/pix-button | pixType and pixKey required. |
Show child attributes
Show child attributes
{
"kind": "location",
"name": "Loja Centro",
"address": "Av. Paulista, 1000",
"latitude": -23.5614,
"longitude": -46.6559
}
Response
Quick reply updated
Shortcut to find the reply (and what the AI uses to choose).
Reserved for automated support. Empty by default.
Whether the reply is also in WhatsApp Business (text only).
Stored message: kind plus the same body as the corresponding send, without number and without send fields (replyid, mentions, delay, readchat, readmessages, async, forward, track_source, track_id).
| kind | Body same as | Note |
|---|---|---|
text | text | Accepts placeholders such as {{name}}. |
media | /send/media: type, file, text, docName | type: image, video, document, audio, ptt or myaudio. A file by URL is kept as sent; in base64, it is stored by the API (image 5 MB, audio and video 16 MB, document 20 MB; 50 MB per instance). |
contact | /send/contact | fullName and phoneNumber required. |
location | /send/location | latitude and longitude required. |
menu | /send/menu | type: button, button_legacy, list or poll (carousel not yet). The button media (file) only by URL. The options must be sendable, otherwise 400: poll with at least 2, list with at least one item (a [...] section does not count) and buttons with at least 1. |
pix | /send/pix-button | pixType and pixKey required. |
Show child attributes
Show child attributes
{
"kind": "location",
"name": "Loja Centro",
"address": "Av. Paulista, 1000",
"latitude": -23.5614,
"longitude": -46.6559
}
