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": "Token inválido.",
"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"
}Editar respuesta rápida
Cambia solo los campos enviados. message sustituye el mensaje completo; cambiar o quitar un archivo elimina el anterior. Si otra edición cambia el mensaje al mismo tiempo, esta devuelve 409 con conflict y no se guarda nada. Las respuestas en WhatsApp Business siguen siendo solo de texto.
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": "Token inválido.",
"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"
}Autorizaciones
Parámetros de ruta
ID de la respuesta rápida.
Cuerpo
En la creación, shortCut y message son obligatorios. En la edición, solo cambian los campos enviados; message reemplaza el mensaje completo.
Atajo para encontrar la respuesta (y lo que la IA usa para elegir).
Reservado para la atención automática. Vacío por defecto.
Solo en la creación y solo con kind: text: también lo crea en WhatsApp Business.
Mensaje guardado: kind más el mismo cuerpo del envío correspondiente, sin number y sin campos de envío (replyid, mentions, delay, readchat, readmessages, async, forward, track_source, track_id).
| kind | Cuerpo igual a | Observación |
|---|---|---|
text | text | Acepta placeholders como {{name}}. |
media | /send/media: type, file, text, docName | type: image, video, document, audio, ptt o myaudio. Un file por URL se conserva tal como se envió; en base64, la API lo guarda (imagen 5 MB, audio y video 16 MB, documento 20 MB; 50 MB por instancia). |
contact | /send/contact | fullName y phoneNumber obligatorios. |
location | /send/location | latitude y longitude obligatorias. |
menu | /send/menu | type: button, button_legacy, list o poll (carrusel todavía no). El medio del botón (file) solo por URL. Las opciones deben poder enviarse, de lo contrario 400: encuesta con al menos 2, lista con al menos un elemento (la sección [...] no cuenta) y botones con al menos 1. |
pix | /send/pix-button | pixType y pixKey obligatorios. |
Show child attributes
Show child attributes
{
"kind": "location",
"name": "Loja Centro",
"address": "Av. Paulista, 1000",
"latitude": -23.5614,
"longitude": -46.6559
}
Respuesta
Respuesta rápida actualizada
Atajo para encontrar la respuesta (y lo que la IA usa para elegir).
Reservado para la atención automática. Vacío por defecto.
Si la respuesta también está en WhatsApp Business (solo texto).
Mensaje guardado: kind más el mismo cuerpo del envío correspondiente, sin number y sin campos de envío (replyid, mentions, delay, readchat, readmessages, async, forward, track_source, track_id).
| kind | Cuerpo igual a | Observación |
|---|---|---|
text | text | Acepta placeholders como {{name}}. |
media | /send/media: type, file, text, docName | type: image, video, document, audio, ptt o myaudio. Un file por URL se conserva tal como se envió; en base64, la API lo guarda (imagen 5 MB, audio y video 16 MB, documento 20 MB; 50 MB por instancia). |
contact | /send/contact | fullName y phoneNumber obligatorios. |
location | /send/location | latitude y longitude obligatorias. |
menu | /send/menu | type: button, button_legacy, list o poll (carrusel todavía no). El medio del botón (file) solo por URL. Las opciones deben poder enviarse, de lo contrario 400: encuesta con al menos 2, lista con al menos un elemento (la sección [...] no cuenta) y botones con al menos 1. |
pix | /send/pix-button | pixType y pixKey obligatorios. |
Show child attributes
Show child attributes
{
"kind": "location",
"name": "Loja Centro",
"address": "Av. Paulista, 1000",
"latitude": -23.5614,
"longitude": -46.6559
}
