{"id":5548,"date":"2026-07-25T23:35:45","date_gmt":"2026-07-25T17:35:45","guid":{"rendered":"http:\/\/localhost:8080\/api\/"},"modified":"2026-07-25T23:35:45","modified_gmt":"2026-07-25T17:35:45","slug":"api","status":"publish","type":"page","link":"https:\/\/whatsping.com\/bn\/api\/","title":{"rendered":"API"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5548\" class=\"elementor elementor-5548\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cdc9bbe e-con-full e-flex e-con e-parent\" data-id=\"cdc9bbe\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bd243a1 elementor-widget elementor-widget-html\" data-id=\"bd243a1\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"><link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin><link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&family=Space+Grotesk:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n<style>\n  :root {\n    --violet: #7c3aed; --violet-deep: #5b21b6; --violet-pale: #f3ecfe; --violet-brd: #ddd0fa;\n    --grad-nav: linear-gradient(100deg, #43277f 0%, #5d35a8 100%);\n    --grad-band: linear-gradient(120deg, #6a45cf 0%, #8560d8 100%);\n    --orange: #f97316; --orange-deep: #ea580c; --grad-orange: linear-gradient(135deg, #ff8a3d 0%, #f36c16 100%);\n    --green: #16a34a; --blue: #2563eb; --amber: #d97706; --rose: #e11d48;\n    --paper: #ffffff; --paper-2: #f6f4fc; --surface-2: #f2edfc; --card: #ffffff;\n    --line: #e9e3f6; --line-2: #d9d0ef;\n    --code-bg: #1c1633; --code-bg2: #16112b; --code-line: #2f2850;\n    --heading: #1e1b2e; --text: #4a4463; --muted: #6b7280; --muted-2: #9aa1b2;\n    --radius: 14px; --maxw: 1180px;\n    --sans: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;\n    --display: \"Space Grotesk\", \"Poppins\", \"Inter\", system-ui, sans-serif;\n    --mono: ui-monospace, \"SF Mono\", \"JetBrains Mono\", \"Menlo\", monospace;\n  }\n  @media (prefers-color-scheme: dark) {\n    :root {\n      --violet: #a78bfa; --violet-deep: #8b5cf6; --violet-pale: #241a3e; --violet-brd: #3d3163;\n      --orange: #fb8a3c; --orange-deep: #f97316; --green: #34d399; --blue: #60a5fa; --amber: #fbbf24; --rose: #fb7185;\n      --paper: #14112a; --paper-2: #1b1738; --surface-2: #201a3c; --card: #221c40; --line: #322a54; --line-2: #3e3563;\n      --code-bg: #161129; --code-bg2: #100c20; --code-line: #2a2348;\n      --heading: #f3f0fb; --text: #d8d2ec; --muted: #a79fc4; --muted-2: #7d7699;\n    }\n  }\n  :root[data-theme=\"dark\"] {\n    --violet: #a78bfa; --violet-deep: #8b5cf6; --violet-pale: #241a3e; --violet-brd: #3d3163;\n    --orange: #fb8a3c; --orange-deep: #f97316; --green: #34d399; --blue: #60a5fa; --amber: #fbbf24; --rose: #fb7185;\n    --paper: #14112a; --paper-2: #1b1738; --surface-2: #201a3c; --card: #221c40; --line: #322a54; --line-2: #3e3563;\n    --code-bg: #161129; --code-bg2: #100c20; --code-line: #2a2348;\n    --heading: #f3f0fb; --text: #d8d2ec; --muted: #a79fc4; --muted-2: #7d7699;\n  }\n  :root[data-theme=\"light\"] {\n    --violet: #7c3aed; --violet-deep: #5b21b6; --violet-pale: #f3ecfe; --violet-brd: #ddd0fa;\n    --orange: #f97316; --orange-deep: #ea580c; --green: #16a34a; --blue: #2563eb; --amber: #d97706; --rose: #e11d48;\n    --paper: #ffffff; --paper-2: #f6f4fc; --surface-2: #f2edfc; --card: #ffffff; --line: #e9e3f6; --line-2: #d9d0ef;\n    --code-bg: #1c1633; --code-bg2: #16112b; --code-line: #2f2850;\n    --heading: #1e1b2e; --text: #4a4463; --muted: #6b7280; --muted-2: #9aa1b2;\n  }\n\n  * { box-sizing: border-box; }\n  body { margin: 0; background: var(--paper); color: var(--text); font-family: var(--sans); font-size: 16px; line-height: 1.6; -webkit-font-smoothing: antialiased; }\n  .wrap { max-width: var(--maxw); margin: 0 auto; padding: 0 24px; }\n  h1,h2,h3,h4 { font-family: var(--display); text-wrap: balance; margin: 0; letter-spacing: -0.02em; line-height: 1.12; color: var(--heading); }\n  a { color: inherit; text-decoration: none; }\n  code, pre { font-family: var(--mono); }\n  .eyebrow { font-family: var(--mono); font-size: 12px; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase; color: var(--violet); }\n\n  .note { background: var(--grad-nav); color: #fff; text-align: center; font-family: var(--mono); font-size: 11.5px; letter-spacing: 0.05em; padding: 8px 16px; text-transform: uppercase; }\n\n  \/* nav *\/\n  .nav { position: sticky; top: 0; z-index: 40; background: var(--grad-nav); }\n  .nav-in { display: flex; align-items: center; gap: 28px; height: 64px; }\n  .logo-img { height: 28px; width: auto; display: block; }\n  .nav-links { display: flex; gap: 22px; margin-left: 6px; }\n  .nav-links a { font-size: 14px; color: #d7cff0; font-weight: 500; }\n  .nav-links a:hover, .nav-links a.active { color: #fff; }\n  .nav-cta { margin-left: auto; display: flex; gap: 12px; align-items: center; }\n  .btn { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; font-size: 14px; padding: 10px 18px; border-radius: 10px; cursor: pointer; border: 1px solid transparent; transition: transform .12s, box-shadow .12s, background .12s; }\n  .btn-orange { background: var(--grad-orange); color: #fff; box-shadow: 0 8px 20px -8px rgba(249,115,22,.7); }\n  .btn-orange:hover { transform: translateY(-1px); }\n  .btn-violet { background: var(--violet); color: #fff; }\n  .btn-violet:hover { background: var(--violet-deep); transform: translateY(-1px); }\n  .btn-outline { border-color: var(--line-2); color: var(--heading); background: var(--card); }\n  .btn-outline:hover { border-color: var(--violet); color: var(--violet); }\n  .btn-ghost-light { color: #fff; border-color: rgba(255,255,255,.35); }\n  .btn-ghost-light:hover { background: rgba(255,255,255,.1); }\n  .theme-btn { background: rgba(255,255,255,.12); border: 1px solid rgba(255,255,255,.28); border-radius: 9px; width: 38px; height: 38px; color: #fff; font-size: 14px; cursor: pointer; }\n\n  \/* subnav *\/\n  .subnav { border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--paper) 90%, transparent); backdrop-filter: blur(10px); position: sticky; top: 64px; z-index: 30; }\n  .subnav-in { display: flex; align-items: center; gap: 8px; height: 52px; overflow-x: auto; }\n  .subnav .tag { display: inline-flex; align-items: center; gap: 6px; font-family: var(--mono); font-size: 12px; font-weight: 600; color: var(--violet); background: var(--violet-pale); border: 1px solid var(--violet-brd); padding: 5px 11px; border-radius: 8px; margin-right: 10px; white-space: nowrap; }\n  .subnav a { font-size: 14px; color: var(--muted); font-weight: 500; padding: 6px 12px; border-radius: 8px; white-space: nowrap; }\n  .subnav a:hover { color: var(--heading); background: var(--surface-2); }\n  .subnav .sn-right { margin-left: auto; display: flex; gap: 12px; align-items: center; }\n  .subnav .sn-right .hint { font-size: 12.5px; color: var(--muted-2); white-space: nowrap; }\n\n  section { padding: 64px 0; }\n  .sec-head { max-width: 640px; margin-bottom: 34px; }\n  .sec-head h2 { font-size: clamp(24px, 3vw, 34px); font-weight: 700; margin: 12px 0 12px; }\n  .sec-head p { font-size: 16.5px; color: var(--muted); margin: 0; }\n\n  \/* hero *\/\n  .hero { background: radial-gradient(120% 90% at 90% 0%, var(--violet-pale) 0%, var(--paper) 55%); }\n  .hero-in { display: grid; grid-template-columns: 0.95fr 1.05fr; gap: 44px; align-items: center; padding: 64px 24px 60px; }\n  .pill-tag { display: inline-block; font-family: var(--mono); font-size: 11px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--violet); background: var(--violet-pale); border: 1px solid var(--violet-brd); padding: 5px 12px; border-radius: 999px; }\n  .hero h1 { font-size: clamp(34px, 4.6vw, 52px); font-weight: 700; margin: 18px 0 16px; letter-spacing: -0.03em; }\n  .hero h1 em { font-style: normal; color: var(--violet); }\n  .hero p.lede { font-size: 17px; color: var(--muted); margin: 0 0 24px; max-width: 42ch; }\n  .hero-cta { display: flex; gap: 12px; flex-wrap: wrap; }\n  .devrow { display: flex; align-items: center; gap: 12px; margin-top: 22px; }\n  .avs { display: flex; }\n  .avs span { width: 30px; height: 30px; border-radius: 50%; border: 2px solid var(--paper); margin-left: -8px; display: grid; place-items: center; font-size: 11px; font-weight: 700; color: #fff; }\n  .devrow small { font-size: 13px; color: var(--muted); }\n\n  \/* code panel *\/\n  .codepanel { background: var(--code-bg); border: 1px solid var(--code-line); border-radius: 16px; overflow: hidden; box-shadow: 0 34px 70px -34px rgba(76,44,148,.6); }\n  .tabs { display: flex; gap: 4px; padding: 10px 12px 0; background: var(--code-bg2); border-bottom: 1px solid var(--code-line); overflow-x: auto; }\n  .tab { font-family: var(--mono); font-size: 12.5px; color: #9a92bf; padding: 8px 14px; border-radius: 8px 8px 0 0; cursor: pointer; border: 1px solid transparent; border-bottom: none; white-space: nowrap; }\n  .tab.active { color: #fff; background: var(--code-bg); border-color: var(--code-line); }\n  .code { margin: 0; padding: 18px 20px; font-size: 12.8px; line-height: 1.75; color: #d8d3ee; white-space: pre; overflow-x: auto; }\n  .code .k { color: #c4b3ff; } .code .s { color: #ffb877; } .code .c { color: #6f6796; } .code .m { color: #7fe0a8; } .code .p { color: #9a92bf; }\n  .code[hidden] { display: none; }\n  .codefoot { display: flex; align-items: center; gap: 8px; padding: 12px 18px; background: var(--code-bg2); border-top: 1px solid var(--code-line); font-size: 12.5px; color: #9a92bf; }\n  .codefoot a { color: #ffb877; font-weight: 600; margin-left: auto; }\n\n  \/* build cards *\/\n  .grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }\n  .bcard { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px; transition: transform .14s, border-color .14s, box-shadow .14s; }\n  .bcard:hover { transform: translateY(-3px); border-color: var(--violet-brd); box-shadow: 0 20px 40px -28px rgba(124,58,237,.5); }\n  .bcard .bic { width: 40px; height: 40px; border-radius: 11px; display: grid; place-items: center; font-size: 18px; margin-bottom: 13px; }\n  .bcard h3 { font-size: 16px; font-weight: 600; margin-bottom: 6px; }\n  .bcard p { font-size: 13.5px; color: var(--muted); margin: 0 0 12px; }\n  .bcard .arw { font-family: var(--mono); font-size: 12px; color: var(--violet); font-weight: 600; }\n\n  \/* three-col cards *\/\n  .trio { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 18px; }\n  .card { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 24px; }\n  .card h3 { font-size: 17px; font-weight: 600; margin-bottom: 14px; }\n  .steps { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 14px; }\n  .steps li { display: flex; gap: 12px; align-items: flex-start; }\n  .steps .num { width: 24px; height: 24px; border-radius: 50%; background: var(--violet); color: #fff; font-size: 12px; font-weight: 700; display: grid; place-items: center; flex-shrink: 0; font-family: var(--mono); }\n  .steps b { color: var(--heading); font-size: 14.5px; font-weight: 600; }\n  .steps p { font-size: 13px; color: var(--muted); margin: 2px 0 0; }\n  .field { font-family: var(--mono); font-size: 12.5px; background: var(--code-bg); color: #d8d3ee; border-radius: 10px; padding: 12px 14px; display: flex; align-items: center; justify-content: space-between; gap: 10px; overflow: hidden; }\n  .field .cp { color: #9a92bf; cursor: pointer; flex-shrink: 0; }\n  .subtle { font-size: 13px; color: var(--muted); margin: 12px 0 0; }\n  .subtle code { background: var(--surface-2); border: 1px solid var(--line); border-radius: 6px; padding: 1px 6px; font-size: 12px; color: var(--violet); }\n\n  \/* endpoints table *\/\n  .eptabs { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 20px; }\n  .epbtn { font-size: 13px; font-weight: 600; color: var(--muted); background: var(--card); border: 1px solid var(--line); padding: 7px 14px; border-radius: 999px; cursor: pointer; }\n  .epbtn.active { color: #fff; background: var(--violet); border-color: var(--violet); }\n  .epgroup { border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; background: var(--card); }\n  .ep { display: grid; grid-template-columns: 84px 1fr; gap: 14px; align-items: center; padding: 13px 18px; border-bottom: 1px solid var(--line); }\n  .ep:last-child { border-bottom: none; }\n  .ep .path { font-family: var(--mono); font-size: 13.5px; color: var(--heading); font-weight: 600; }\n  .ep .desc { font-size: 13px; color: var(--muted); margin-top: 2px; }\n  .m { font-family: var(--mono); font-size: 11px; font-weight: 700; letter-spacing: .04em; padding: 4px 0; border-radius: 6px; text-align: center; }\n  .m.get { color: var(--blue); background: color-mix(in srgb, var(--blue) 13%, transparent); }\n  .m.post { color: var(--green); background: color-mix(in srgb, var(--green) 14%, transparent); }\n  .m.put { color: var(--amber); background: color-mix(in srgb, var(--amber) 16%, transparent); }\n  .m.del { color: var(--rose); background: color-mix(in srgb, var(--rose) 14%, transparent); }\n  .epsec { display: none; }\n  .epsec.active { display: block; }\n\n  \/* webhook flow *\/\n  .flow { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; justify-content: center; margin-top: 8px; }\n  .fnode { display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; min-width: 108px; }\n  .fnode .fi { width: 56px; height: 56px; border-radius: 15px; display: grid; place-items: center; color: #fff; font-size: 22px; box-shadow: 0 12px 26px -12px rgba(124,58,237,.5); }\n  .fnode img { width: 56px; height: 56px; object-fit: contain; }\n  .fnode small { font-size: 12.5px; color: var(--muted); font-weight: 600; }\n  .farrow { color: var(--violet); font-size: 20px; }\n\n  \/* limits table *\/\n  .limits { width: 100%; border-collapse: collapse; background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; }\n  .limits th, .limits td { text-align: left; padding: 13px 18px; font-size: 14px; border-bottom: 1px solid var(--line); }\n  .limits th { font-family: var(--mono); font-size: 11.5px; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); background: var(--surface-2); font-weight: 600; }\n  .limits td:first-child { font-weight: 600; color: var(--heading); }\n  .limits tr:last-child td { border-bottom: none; }\n  .limits td { color: var(--text); font-variant-numeric: tabular-nums; }\n\n  \/* final band *\/\n  .final-band { background: var(--grad-band); border-radius: 22px; padding: 44px; display: flex; align-items: center; justify-content: space-between; gap: 24px; flex-wrap: wrap; position: relative; overflow: hidden; }\n  .final-band::after { content:\"\"; position:absolute; inset:0; background: radial-gradient(50% 120% at 90% 10%, rgba(255,255,255,.14), transparent 60%); pointer-events:none; }\n  .final-band h2 { color: #fff; font-size: clamp(22px, 2.6vw, 30px); position: relative; max-width: 22ch; }\n  .final-band p { color: #e6ddf8; margin: 8px 0 0; position: relative; }\n  .final-band .fcta { display: flex; gap: 12px; position: relative; flex-wrap: wrap; }\n\n  footer { background: linear-gradient(180deg, #2a1a4f 0%, #1e1338 100%); color: #cfc6e6; padding: 50px 0 28px; margin-top: 20px; }\n  .foot-grid { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1fr; gap: 28px; }\n  .foot-brand .logo-img { height: 28px; margin-bottom: 12px; }\n  .foot-brand p { font-size: 13px; color: #a89fc4; max-width: 26ch; }\n  .foot-col h5 { font-family: var(--display); font-size: 12.5px; letter-spacing: .04em; text-transform: uppercase; color: #fff; margin: 2px 0 12px; }\n  .foot-col a { display: block; font-size: 13.5px; color: #b3aacb; margin-bottom: 8px; }\n  .foot-col a:hover { color: #fff; }\n  .foot-bottom { border-top: 1px solid rgba(255,255,255,.1); margin-top: 30px; padding-top: 16px; font-size: 12.5px; color: #8b83a6; }\n\n  @media (max-width: 940px) {\n    .hero-in, .grid, .trio, .foot-grid { grid-template-columns: 1fr; }\n    .grid { grid-template-columns: 1fr 1fr; }\n    .nav-links, .subnav .sn-right .hint { display: none; }\n  }\n  @media (max-width: 560px) { .grid { grid-template-columns: 1fr; } .ep { grid-template-columns: 72px 1fr; } }\n  @media (prefers-reduced-motion: reduce) { * { transition: none !important; } }\n  :focus-visible { outline: 2px solid var(--violet); outline-offset: 2px; border-radius: 6px; }\n\n  \/* ============ MOBILE RESPONSIVENESS ============ *\/\n  html, body { max-width: 100%; overflow-x: hidden; }\n  img, pre, table, iframe, video { max-width: 100%; }\n\n  @media (max-width: 820px) {\n    .wrap { padding-left: 18px; padding-right: 18px; }\n    section { padding: 54px 0; }\n    .sec-head { margin-bottom: 30px; }\n    \/* Nav fits on phones *\/\n    .nav-in { gap: 12px; height: 60px; }\n    .nav-cta { gap: 8px; }\n    .btn { padding: 9px 14px; font-size: 13.5px; }\n    .nav-cta .btn-ghost-light, .nav-cta .btn-ghost { display: none; }\n    .logo-img { height: 24px; }\n    .logo { font-size: 17px; }\n    .theme-btn { width: 36px; height: 36px; }\n    \/* Data tables scroll horizontally instead of overflowing *\/\n    .htab, .logs, .limits { display: block; overflow-x: auto; white-space: nowrap; }\n  }\n\n  @media (max-width: 620px) {\n    .hero-in { padding: 40px 18px 48px !important; gap: 30px; }\n    .hero h1 { font-size: 33px; }\n    .hero p.lede { font-size: 15.5px; }\n    .hero-cta { width: 100%; }\n    .hero-cta .btn { flex: 1 1 150px; justify-content: center; }\n    \/* Homepage hero: focus on the live chat, drop the contact list *\/\n    .panel .mock-grid { grid-template-columns: 1fr; }\n    .panel .mock-list { display: none; }\n    \/* Sections tighten *\/\n    .statband { padding: 28px 20px; grid-template-columns: 1fr 1fr; }\n    .why-ic { width: 66px; height: 66px; font-size: 26px; }\n    .dive { gap: 30px; }\n    .dive-visual { padding: 16px; }\n    .plan { padding: 26px 22px; }\n    .card { padding: 20px; }\n    \/* Bands + CTAs stack full width *\/\n    .final-band, .pricewrap { padding: 30px 22px; }\n    .final-band .btn, .final-band .fcta { width: 100%; }\n    .final-band .fcta { flex-direction: column; }\n    .final-band .fcta .btn { width: 100%; }\n    \/* Developer\/webhook panels *\/\n    .cat { gap: 16px; }\n    .catlist { position: static; }\n    .flow { gap: 6px; }\n    .fnode { min-width: 78px; }\n    .fnode .fi, .fnode img { width: 46px; height: 46px; }\n    \/* Footer *\/\n    .foot-grid { gap: 22px 24px; }\n  }\n\n  @media (max-width: 430px) {\n    .hero h1 { font-size: 28px; }\n    .grid, .integ, .chgrid, .why, .statband, .evgrid { grid-template-columns: 1fr !important; }\n    .hero-proof { gap: 14px; }\n    .foot-grid { grid-template-columns: 1fr 1fr; }\n    .foot-brand { grid-column: 1 \/ -1; }\n  }\n\n\n  \/* ---- mobile hamburger nav ---- *\/\n  .hamb { display: none; flex-direction: column; justify-content: center; gap: 5px; width: 40px; height: 40px; background: rgba(255,255,255,.12); border: 1px solid rgba(255,255,255,.28); border-radius: 9px; cursor: pointer; padding: 0 10px; }\n  .hamb span { display: block; height: 2px; width: 100%; background: #fff; border-radius: 2px; transition: transform .22s, opacity .22s; }\n  .nav.open .hamb span:nth-child(1) { transform: translateY(7px) rotate(45deg); }\n  .nav.open .hamb span:nth-child(2) { opacity: 0; }\n  .nav.open .hamb span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }\n  .mobmenu { display: none; }\n  @media (max-width: 820px) {\n    .nav-links { display: none; }\n    .nav-cta .btn { display: none; }\n    .hamb { display: flex; }\n    .mobmenu { position: absolute; top: 100%; left: 0; right: 0; background: var(--grad-nav); border-top: 1px solid rgba(255,255,255,.14); padding: 12px 18px 18px; flex-direction: column; gap: 8px; box-shadow: 0 24px 44px -20px rgba(0,0,0,.55); max-height: calc(100vh - 60px); overflow-y: auto; }\n    .nav.open .mobmenu { display: flex; }\n    .mobmenu .link { color: #e7dffb; font-weight: 500; font-size: 15px; padding: 11px 6px; border-bottom: 1px solid rgba(255,255,255,.09); }\n    .mobmenu .link:active { color: #fff; }\n    .mobmenu .btn { width: 100%; justify-content: center; margin-top: 4px; display: inline-flex; }\n  }\n\n\n  \/* ===== constant header\/footer ===== *\/\n  .nav{position:sticky;top:0;z-index:40;background:var(--grad-nav);}\n  .nav-in{display:flex;align-items:center;gap:26px;height:64px;}\n  .logo-img{height:29px;width:auto;display:block;}\n  .nav-links{display:flex;gap:22px;margin-left:8px;}\n  .nav-links a{font-size:14.5px;color:#d7cff0;font-weight:500;}\n  .nav-links a:hover,.nav-links a.active{color:#fff;}\n  .nav-cta{margin-left:auto;display:flex;gap:12px;align-items:center;}\n  .hamb{display:none;flex-direction:column;justify-content:center;gap:5px;width:40px;height:40px;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.28);border-radius:9px;cursor:pointer;padding:0 10px;}\n  .hamb span{display:block;height:2px;width:100%;background:#fff;border-radius:2px;transition:transform .22s,opacity .22s;}\n  .nav.open .hamb span:nth-child(1){transform:translateY(7px) rotate(45deg);}\n  .nav.open .hamb span:nth-child(2){opacity:0;}\n  .nav.open .hamb span:nth-child(3){transform:translateY(-7px) rotate(-45deg);}\n  .mobmenu{display:none;}\n  footer{background:linear-gradient(180deg,#2a1a4f 0%,#1e1338 100%);color:#cfc6e6;padding:54px 0 30px;margin-top:24px;}\n  .foot-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr 1fr;gap:30px;}\n  .foot-brand .logo-img{height:30px;margin-bottom:14px;}\n  .foot-brand p{font-size:13.5px;color:#a89fc4;max-width:26ch;margin:0 0 16px;}\n  .foot-social{display:flex;gap:10px;}\n  .foot-social a{width:34px;height:34px;border-radius:8px;display:grid;place-items:center;}\n  .foot-social a img{width:34px;height:34px;object-fit:contain;}\n  .foot-social a:hover{transform:translateY(-2px);}\n  .foot-col h5{font-family:var(--display);font-size:13px;letter-spacing:.04em;text-transform:uppercase;color:#fff;margin:4px 0 14px;}\n  .foot-col a{display:block;font-size:13.5px;color:#b3aacb;margin-bottom:9px;}\n  .foot-col a:hover{color:#fff;}\n  .foot-bottom{border-top:1px solid rgba(255,255,255,.1);margin-top:34px;padding-top:18px;font-size:12.5px;color:#8b83a6;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;}\n  .foot-bottom a{color:#8b83a6;} .foot-bottom a:hover{color:#fff;}\n  .subnav{top:64px;}\n  @media(max-width:820px){\n    .nav-in{gap:12px;height:60px;}\n    .nav-links{display:none;}\n    .nav-cta{gap:8px;}\n    .nav-cta .btn{display:none;}\n    .hamb{display:flex;}\n    .logo-img{height:24px;}\n    .mobmenu{position:absolute;top:100%;left:0;right:0;background:var(--grad-nav);border-top:1px solid rgba(255,255,255,.14);padding:12px 18px 18px;flex-direction:column;gap:8px;box-shadow:0 24px 44px -20px rgba(0,0,0,.55);max-height:calc(100vh - 60px);overflow-y:auto;}\n    .nav.open .mobmenu{display:flex;}\n    .mobmenu .link{color:#e7dffb;font-weight:500;font-size:15px;padding:11px 6px;border-bottom:1px solid rgba(255,255,255,.09);}\n    .mobmenu .btn{width:100%;justify-content:center;margin-top:4px;display:inline-flex;}\n    .foot-grid{grid-template-columns:1fr 1fr;}\n  }\n  @media(max-width:520px){.foot-grid{grid-template-columns:1fr 1fr;}.foot-brand{grid-column:1\/-1;}}\n\n<\/style>\n<header class=\"nav\">\r\n  <div class=\"wrap nav-in\">\r\n    <a href=\"\/\" aria-label=\"WhatsPing home\"><img decoding=\"async\" class=\"logo-img\" src=\"\/whatsping-site\/assets\/img\/logo-white.png\" alt=\"WhatsPing\"><\/a>\r\n    <nav class=\"nav-links\">\r\n      <a href=\"\/features\/\">Features<\/a>\r\n      <a href=\"\/pricing\/\">Pricing<\/a>\r\n      <a href=\"\/integrations\/\">Integrations<\/a>\r\n      <a href=\"\/api\/\" class=\"active\">Developers<\/a>\r\n      <a href=\"\/blog\/\">Blog<\/a>\r\n    <\/nav>\r\n    <div class=\"nav-cta\">\r\n      <button class=\"theme-btn\" id=\"themeBtn\" aria-label=\"Toggle theme\">\u25d0<\/button>\r\n      <a class=\"btn btn-ghost-light\" href=\"https:\/\/app.whatsping.com\/login\">Log in<\/a>\r\n      <a class=\"btn btn-orange\" href=\"https:\/\/app.whatsping.com\/register\">Get Started Free<\/a>\r\n      <button class=\"hamb\" id=\"hambBtn\" aria-label=\"Open menu\" aria-expanded=\"false\"><span><\/span><span><\/span><span><\/span><\/button>\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"mobmenu\" id=\"mobMenu\">\r\n      <a href=\"\/features\/\" class=\"link\">Features<\/a>\r\n      <a href=\"\/pricing\/\" class=\"link\">Pricing<\/a>\r\n      <a href=\"\/integrations\/\" class=\"link\">Integrations<\/a>\r\n      <a href=\"\/api\/\" class=\"link\">Developers<\/a>\r\n      <a href=\"\/blog\/\" class=\"link\">Blog<\/a>\r\n      <a class=\"btn btn-ghost-light\" href=\"https:\/\/app.whatsping.com\/login\">Log in<\/a>\r\n      <a class=\"btn btn-orange\" href=\"https:\/\/app.whatsping.com\/register\">Get Started Free<\/a>\r\n  <\/div>\r\n<\/header>\r\n\r\n<div class=\"subnav\">\r\n  <div class=\"wrap subnav-in\">\r\n    <span class=\"tag\"> API<\/span>\r\n    <a href=\"#build\">Overview<\/a>\r\n    <a href=\"#quickstart\">Quick Start<\/a>\r\n    <a href=\"#endpoints\">Endpoints<\/a>\r\n    <a href=\"#webhooks\">Webhooks<\/a>\r\n    <a href=\"#limits\">Limits<\/a>\r\n    <div class=\"sn-right\">\r\n      <span class=\"hint\">Base URL \u00b7 <code style=\"font-family:var(--mono);font-size:12px\">https:\/\/app.whatsping.com\/api\/wpbox<\/code><\/span>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- HERO -->\r\n<section class=\"hero\" style=\"padding:0;\">\r\n  <div class=\"wrap hero-in\">\r\n    <div>\r\n      <span class=\"pill-tag\">Developer Platform<\/span>\r\n      <h1>Build with the <em>WhatsPing API<\/em><\/h1>\r\n      <p class=\"lede\">Send messages, manage contacts and groups, create templates, run campaigns and read your WhatsApp account health \u2014 all over a simple REST API on top of the official WhatsApp Cloud API.<\/p>\r\n      <div class=\"hero-cta\">\r\n        <a class=\"btn btn-violet\" href=\"https:\/\/app.whatsping.com\/register\">\ud83d\udd11 Get API Key<\/a>\r\n        <a class=\"btn btn-outline\" href=\"#endpoints\">\ud83d\udcd8 View Endpoints<\/a>\r\n      <\/div>\r\n      <div class=\"devrow\">\r\n        <div class=\"avs\">\r\n          <span style=\"background:#7c3aed\">A<\/span><span style=\"background:#f97316\">M<\/span><span style=\"background:#2563eb\">S<\/span><span style=\"background:#16a34a\">R<\/span>\r\n        <\/div>\r\n        <small>Token-based auth \u00b7 JSON over HTTPS \u00b7 works from any language<\/small>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"codepanel\">\r\n      <div class=\"tabs\" role=\"tablist\">\r\n        <button class=\"tab active\" data-lang=\"curl\">cURL<\/button>\r\n        <button class=\"tab\" data-lang=\"php\">PHP<\/button>\r\n        <button class=\"tab\" data-lang=\"node\">Node.js<\/button>\r\n        <button class=\"tab\" data-lang=\"python\">Python<\/button>\r\n      <\/div>\r\n<pre class=\"code\" data-lang=\"curl\"><span class=\"c\"># Send a WhatsApp message to a phone number<\/span>\r\ncurl -X <span class=\"k\">POST<\/span> https:\/\/app.whatsping.com\/api\/wpbox\/sendMessageToPhoneNumber \\\r\n  -H <span class=\"s\">\"Content-Type: application\/json\"<\/span> \\\r\n  -d <span class=\"s\">'{\r\n    \"token\":   \"YOUR_API_TOKEN\",\r\n    \"phone\":   \"8801712345678\",\r\n    \"message\": \"Hello from WhatsPing \ud83d\ude80\"\r\n  }'<\/span><\/pre>\r\n<pre class=\"code\" data-lang=\"php\" hidden=\"\"><span class=\"c\">\/\/ Laravel HTTP client<\/span>\r\n<span class=\"k\">use<\/span> Illuminate\\Support\\Facades\\Http;\r\n\r\n<span class=\"p\">$res<\/span> = Http::post(<span class=\"s\">'https:\/\/app.whatsping.com\/api\/wpbox\/sendMessageToPhoneNumber'<\/span>, [\r\n    <span class=\"s\">'token'<\/span>   =&gt; <span class=\"s\">'YOUR_API_TOKEN'<\/span>,\r\n    <span class=\"s\">'phone'<\/span>   =&gt; <span class=\"s\">'8801712345678'<\/span>,\r\n    <span class=\"s\">'message'<\/span> =&gt; <span class=\"s\">'Hello from WhatsPing \ud83d\ude80'<\/span>,\r\n]);\r\n\r\n<span class=\"k\">echo<\/span> <span class=\"p\">$res<\/span>-&gt;body();<\/pre>\r\n<pre class=\"code\" data-lang=\"node\" hidden=\"\"><span class=\"c\">\/\/ Node 18+ (native fetch)<\/span>\r\n<span class=\"k\">await<\/span> fetch(<span class=\"s\">'https:\/\/app.whatsping.com\/api\/wpbox\/sendMessageToPhoneNumber'<\/span>, {\r\n  method: <span class=\"s\">'POST'<\/span>,\r\n  headers: { <span class=\"s\">'Content-Type'<\/span>: <span class=\"s\">'application\/json'<\/span> },\r\n  body: JSON.stringify({\r\n    token:   <span class=\"s\">'YOUR_API_TOKEN'<\/span>,\r\n    phone:   <span class=\"s\">'8801712345678'<\/span>,\r\n    message: <span class=\"s\">'Hello from WhatsPing \ud83d\ude80'<\/span>,\r\n  }),\r\n});<\/pre>\r\n<pre class=\"code\" data-lang=\"python\" hidden=\"\"><span class=\"c\"># Python (requests)<\/span>\r\n<span class=\"k\">import<\/span> requests\r\n\r\nrequests.post(<span class=\"s\">'https:\/\/app.whatsping.com\/api\/wpbox\/sendMessageToPhoneNumber'<\/span>, json={\r\n    <span class=\"s\">'token'<\/span>:   <span class=\"s\">'YOUR_API_TOKEN'<\/span>,\r\n    <span class=\"s\">'phone'<\/span>:   <span class=\"s\">'8801712345678'<\/span>,\r\n    <span class=\"s\">'message'<\/span>: <span class=\"s\">'Hello from WhatsPing \ud83d\ude80'<\/span>,\r\n})<\/pre>\r\n      <div class=\"codefoot\">\r\n        <span>Response<\/span>\r\n        <code style=\"color:#7fe0a8;font-size:12px\">{ \"status\": \"success\" }<\/code>\r\n        <a href=\"#\">Don't have a key yet? Get one \u2192<\/a>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- BUILD CARDS -->\r\n<section id=\"build\">\r\n  <div class=\"wrap\">\r\n    <div class=\"sec-head\"><span class=\"eyebrow\">What you can build<\/span><h2>Everything the API gives you<\/h2><\/div>\r\n    <div class=\"grid\">\r\n      <div class=\"bcard\"><div class=\"bic\" style=\"background:color-mix(in srgb,var(--green) 14%,transparent);color:var(--green)\">\ud83d\udcac<\/div><h3>Messaging<\/h3><p>Send text, media, interactive and template messages to any number.<\/p><span class=\"arw\">7 endpoints \u2192<\/span><\/div>\r\n      <div class=\"bcard\"><div class=\"bic\" style=\"background:var(--violet-pale);color:var(--violet)\">\ud83d\udc65<\/div><h3>Contacts<\/h3><p>Create, read, update and delete contacts; toggle the AI bot per contact.<\/p><span class=\"arw\">6 endpoints \u2192<\/span><\/div>\r\n      <div class=\"bcard\"><div class=\"bic\" style=\"background:color-mix(in srgb,var(--blue) 13%,transparent);color:var(--blue)\">\ud83d\uddc2\ufe0f<\/div><h3>Groups<\/h3><p>Organize contacts into groups you can target in campaigns.<\/p><span class=\"arw\">4 endpoints \u2192<\/span><\/div>\r\n      <div class=\"bcard\"><div class=\"bic\" style=\"background:color-mix(in srgb,var(--orange) 15%,transparent);color:var(--orange-deep)\">\ud83d\udccb<\/div><h3>Templates<\/h3><p>List, create and submit WhatsApp templates and upload header media.<\/p><span class=\"arw\">4 endpoints \u2192<\/span><\/div>\r\n      <div class=\"bcard\"><div class=\"bic\" style=\"background:color-mix(in srgb,var(--green) 14%,transparent);color:var(--green)\">\ud83d\udce3<\/div><h3>Campaigns<\/h3><p>List campaigns and trigger campaign messages to a phone number.<\/p><span class=\"arw\">2 endpoints \u2192<\/span><\/div>\r\n      <div class=\"bcard\"><div class=\"bic\" style=\"background:var(--violet-pale);color:var(--violet)\">\u26a1<\/div><h3>Automated replies<\/h3><p>Manage keyword auto-replies \u2014 exact match, contains and welcome.<\/p><span class=\"arw\">4 endpoints \u2192<\/span><\/div>\r\n      <div class=\"bcard\"><div class=\"bic\" style=\"background:color-mix(in srgb,var(--blue) 13%,transparent);color:var(--blue)\">\ud83d\udcca<\/div><h3>Account status<\/h3><p>Read connection state, quality rating and messaging tier.<\/p><span class=\"arw\">2 endpoints \u2192<\/span><\/div>\r\n      <div class=\"bcard\"><div class=\"bic\" style=\"background:color-mix(in srgb,var(--orange) 15%,transparent);color:var(--orange-deep)\">\ud83d\udd17<\/div><h3>Inbound webhook<\/h3><p>Receive messages and status updates from the WhatsApp Cloud API.<\/p><span class=\"arw\">See webhooks \u2192<\/span><\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- QUICK START + AUTH -->\r\n<section id=\"quickstart\" style=\"background:var(--paper-2);\">\r\n  <div class=\"wrap\">\r\n    <div class=\"trio\">\r\n      <div class=\"card\">\r\n        <h3>Quick start<\/h3>\r\n        <ul class=\"steps\">\r\n          <li><span class=\"num\">1<\/span><div><b>Create an account<\/b><p>Sign up free and connect your WhatsApp number with embedded signup.<\/p><\/div><\/li>\r\n          <li><span class=\"num\">2<\/span><div><b>Generate an API token<\/b><p>Create a personal access token from your dashboard settings.<\/p><\/div><\/li>\r\n          <li><span class=\"num\">3<\/span><div><b>Make your first request<\/b><p>Call <code style=\"font-family:var(--mono);font-size:12px;color:var(--violet)\">\/sendMessageToPhoneNumber<\/code> with your token.<\/p><\/div><\/li>\r\n        <\/ul>\r\n      <\/div>\r\n      <div class=\"card\" id=\"auth\">\r\n        <h3>Authentication<\/h3>\r\n        <p style=\"font-size:14px;color:var(--muted);margin:0 0 12px\">Every request is authenticated with your <b>API token<\/b>. Pass it as <code style=\"font-family:var(--mono);font-size:12px;color:var(--violet)\">token<\/code> \u2014 a query parameter for GET requests, or a field in the JSON body for POST\/PUT\/DELETE.<\/p>\r\n        <div class=\"field\"><span>token = YOUR_API_TOKEN<\/span><span class=\"cp\" title=\"Illustrative\">\u29c9<\/span><\/div>\r\n        <p class=\"subtle\">Tokens are scoped to your organization. Keep them secret \u2014 never expose a token in client-side code. An invalid token returns <code>{ \"status\": \"error\" }<\/code>.<\/p>\r\n      <\/div>\r\n      <div class=\"card\">\r\n        <h3>Response format<\/h3>\r\n        <p style=\"font-size:14px;color:var(--muted);margin:0 0 12px\">All responses are JSON with a <code style=\"font-family:var(--mono);font-size:12px;color:var(--violet)\">status<\/code> field of <code style=\"font-family:var(--mono);font-size:12px;color:var(--green)\">success<\/code> or <code style=\"font-family:var(--mono);font-size:12px;color:var(--rose)\">error<\/code>.<\/p>\r\n        <div class=\"field\" style=\"display:block;white-space:pre;line-height:1.7\"><span style=\"color:#7fe0a8\">\/\/ success<\/span>\r\n{ \"status\": \"success\",\r\n  \"contacts\": [ ... ] }\r\n\r\n<span style=\"color:#ffb877\">\/\/ error<\/span>\r\n{ \"status\": \"error\",\r\n  \"message\": \"Invalid token\" }<\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- ENDPOINTS -->\r\n<section id=\"endpoints\">\r\n  <div class=\"wrap\">\r\n    <div class=\"sec-head\"><span class=\"eyebrow\">Reference<\/span><h2>API endpoints<\/h2><p>All paths are relative to <code style=\"font-family:var(--mono);font-size:14px;color:var(--violet)\">https:\/\/app.whatsping.com\/api\/wpbox<\/code>. Every request needs your <code style=\"font-family:var(--mono);font-size:14px;color:var(--violet)\">token<\/code>.<\/p><\/div>\r\n\r\n    <div class=\"eptabs\">\r\n      <button class=\"epbtn active\" data-ep=\"messages\">Messages<\/button>\r\n      <button class=\"epbtn\" data-ep=\"contacts\">Contacts<\/button>\r\n      <button class=\"epbtn\" data-ep=\"groups\">Groups<\/button>\r\n      <button class=\"epbtn\" data-ep=\"templates\">Templates<\/button>\r\n      <button class=\"epbtn\" data-ep=\"campaigns\">Campaigns<\/button>\r\n      <button class=\"epbtn\" data-ep=\"replies\">Automated replies<\/button>\r\n      <button class=\"epbtn\" data-ep=\"account\">Account<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"epsec active\" data-ep=\"messages\"><div class=\"epgroup\">\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/sendMessageToPhoneNumber<\/div><div class=\"desc\">Send a text, media or interactive (buttons) message. Params: <code style=\"font-family:var(--mono);font-size:12px\">phone<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">message<\/code>, optional <code style=\"font-family:var(--mono);font-size:12px\">header<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">footer<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">buttons<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">image<\/code>.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/sendtemplatemessage<\/div><div class=\"desc\">Send an approved template. Params: <code style=\"font-family:var(--mono);font-size:12px\">phone<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">template_name<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">template_language<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">components<\/code>.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/sendmedia<\/div><div class=\"desc\">Send a media message (image, document or video) to a phone number.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/sendCampaignMessageToPhoneNumber<\/div><div class=\"desc\">Trigger a campaign's message to a number. Params: <code style=\"font-family:var(--mono);font-size:12px\">phone<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">campaing_id<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">data<\/code>.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/getConversations<\/div><div class=\"desc\">List recent conversations for your organization.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/getMessages<\/div><div class=\"desc\">List the latest messages for a contact. Param: <code style=\"font-family:var(--mono);font-size:12px\">contact_id<\/code>.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/getMessageStatus<\/div><div class=\"desc\">Get the delivery status of a message. Param: <code style=\"font-family:var(--mono);font-size:12px\">message_id<\/code>.<\/div><\/div><\/div>\r\n    <\/div><\/div>\r\n\r\n    <div class=\"epsec\" data-ep=\"contacts\"><div class=\"epgroup\">\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/getContacts<\/div><div class=\"desc\">List all contacts in your organization.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/getSingleContact<\/div><div class=\"desc\">Fetch one contact by <code style=\"font-family:var(--mono);font-size:12px\">contact_id<\/code> or <code style=\"font-family:var(--mono);font-size:12px\">phone<\/code>.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/makeContact<\/div><div class=\"desc\">Create or update a contact. Params: <code style=\"font-family:var(--mono);font-size:12px\">name<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">phone<\/code>, optional <code style=\"font-family:var(--mono);font-size:12px\">email<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">groups<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">custom<\/code>.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m put\">POST\/PUT<\/span><div><div class=\"path\">\/updateContact<\/div><div class=\"desc\">Update a contact's name, phone, email, language or subscription. Param: <code style=\"font-family:var(--mono);font-size:12px\">id<\/code>.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m del\">DELETE<\/span><div><div class=\"path\">\/deleteContact<\/div><div class=\"desc\">Delete a contact by <code style=\"font-family:var(--mono);font-size:12px\">id<\/code>.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/updateAIBot<\/div><div class=\"desc\">Enable or disable the AI bot for a specific contact.<\/div><\/div><\/div>\r\n    <\/div><\/div>\r\n\r\n    <div class=\"epsec\" data-ep=\"groups\"><div class=\"epgroup\">\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/getGroups<\/div><div class=\"desc\">List contact groups. Optional <code style=\"font-family:var(--mono);font-size:12px\">showContacts=yes<\/code> to include members.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/addGroup<\/div><div class=\"desc\">Create a new contact group.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m put\">PUT<\/span><div><div class=\"path\">\/updateGroup<\/div><div class=\"desc\">Rename or update a group.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m del\">DELETE<\/span><div><div class=\"path\">\/deleteGroup<\/div><div class=\"desc\">Delete a group.<\/div><\/div><\/div>\r\n    <\/div><\/div>\r\n\r\n    <div class=\"epsec\" data-ep=\"templates\"><div class=\"epgroup\">\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/getTemplates<\/div><div class=\"desc\">List your WhatsApp message templates and their approval status.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/createTemplate<\/div><div class=\"desc\">Create a template and submit it to Meta for approval.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/uploadTemplateMedia<\/div><div class=\"desc\">Upload an image, video or PDF header for a template.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m del\">POST\/DELETE<\/span><div><div class=\"path\">\/deleteTemplate<\/div><div class=\"desc\">Delete a template.<\/div><\/div><\/div>\r\n    <\/div><\/div>\r\n\r\n    <div class=\"epsec\" data-ep=\"campaigns\"><div class=\"epgroup\">\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/getCampaigns<\/div><div class=\"desc\">List campaigns. Optional <code style=\"font-family:var(--mono);font-size:12px\">type<\/code> = <code style=\"font-family:var(--mono);font-size:12px\">bot<\/code>, <code style=\"font-family:var(--mono);font-size:12px\">api<\/code> or <code style=\"font-family:var(--mono);font-size:12px\">regular<\/code>.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/sendcampaigns<\/div><div class=\"desc\">Send a campaign message to a phone number.<\/div><\/div><\/div>\r\n    <\/div><\/div>\r\n\r\n    <div class=\"epsec\" data-ep=\"replies\"><div class=\"epgroup\">\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/getAutomatedReplies<\/div><div class=\"desc\">List keyword auto-replies (exact match, contains, welcome).<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/addAutomatedReply<\/div><div class=\"desc\">Create a keyword auto-reply.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m put\">PUT<\/span><div><div class=\"path\">\/updateAutomatedReply<\/div><div class=\"desc\">Update an existing auto-reply.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m del\">DELETE<\/span><div><div class=\"path\">\/deleteAutomatedReply<\/div><div class=\"desc\">Delete an auto-reply.<\/div><\/div><\/div>\r\n    <\/div><\/div>\r\n\r\n    <div class=\"epsec\" data-ep=\"account\"><div class=\"epgroup\">\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/me<\/div><div class=\"desc\">Return the authenticated account for the token.<\/div><\/div><\/div>\r\n      <div class=\"ep\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/accountStatus<\/div><div class=\"desc\">WhatsApp connection state, account status, phone quality rating and messaging tier.<\/div><\/div><\/div>\r\n    <\/div><\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- WEBHOOKS -->\r\n<section id=\"webhooks\" style=\"background:var(--paper-2);\">\r\n  <div class=\"wrap\">\r\n    <div class=\"sec-head\"><span class=\"eyebrow\">Real-time inbound<\/span><h2>Webhooks<\/h2><p>WhatsPing exposes a webhook that the <b>WhatsApp Cloud API<\/b> calls whenever a customer messages your number or a message's status changes. You set this URL in Meta once during setup \u2014 WhatsPing verifies it and routes every event into your inbox, bots and flows.<\/p><\/div>\r\n\r\n    <div class=\"trio\" style=\"grid-template-columns:1.4fr 1fr;align-items:stretch\">\r\n      <div class=\"card\">\r\n        <h3>How inbound events flow<\/h3>\r\n        <div class=\"flow\">\r\n          <div class=\"fnode\"><img decoding=\"async\" src=\"\/whatsping-site\/assets\/img\/icons\/whatsapp.png\" alt=\"WhatsApp\"><small>Customer messages<br>your number<\/small><\/div>\r\n          <span class=\"farrow\">\u2192<\/span>\r\n          <div class=\"fnode\"><div class=\"fi\" style=\"background:var(--grad-orange)\">\ud83d\udd17<\/div><small>WhatsPing<br>webhook<\/small><\/div>\r\n          <span class=\"farrow\">\u2192<\/span>\r\n          <div class=\"fnode\"><div class=\"fi\" style=\"background:var(--grad-band)\">\ud83d\udcac<\/div><small>Inbox \u00b7 bots \u00b7<br>flows<\/small><\/div>\r\n        <\/div>\r\n        <p class=\"subtle\" style=\"margin-top:22px\">Events delivered by Meta include <b>inbound messages<\/b> (text, media, interactive replies) and <b>message status updates<\/b> (sent, delivered, read, failed) \u2014 WhatsPing processes them automatically, triggering keyword replies, flows and AI.<\/p>\r\n      <\/div>\r\n      <div class=\"card\">\r\n        <h3>Webhook endpoints<\/h3>\r\n        <div class=\"epgroup\" style=\"border-radius:12px\">\r\n          <div class=\"ep\" style=\"grid-template-columns:64px 1fr\"><span class=\"m get\">GET<\/span><div><div class=\"path\">\/webhook\/wpbox\/receive\/{token}<\/div><div class=\"desc\">Verification handshake \u2014 Meta calls this once to confirm the URL.<\/div><\/div><\/div>\r\n          <div class=\"ep\" style=\"grid-template-columns:64px 1fr\"><span class=\"m post\">POST<\/span><div><div class=\"path\">\/webhook\/wpbox\/receive\/{token}<\/div><div class=\"desc\">Receives inbound messages and status updates from the Cloud API.<\/div><\/div><\/div>\r\n        <\/div>\r\n        <p class=\"subtle\">The <code>{token}<\/code> in the URL is unique to your organization, so events are always attributed to the right account.<\/p>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- LIMITS -->\r\n<section id=\"limits\">\r\n  <div class=\"wrap\">\r\n    <div class=\"sec-head\"><span class=\"eyebrow\">Fair use<\/span><h2>Plan limits<\/h2><p>API usage counts against your plan's monthly quotas \u2014 the same limits that apply across the app. Upgrade any time for more headroom.<\/p><\/div>\r\n    <div style=\"overflow-x:auto\">\r\n    <table class=\"limits\">\r\n      <thead><tr><th>Resource<\/th><th>Free 30 Days<\/th><th>Standard<\/th><th>Premium<\/th><\/tr><\/thead>\r\n      <tbody>\r\n        <tr><td>Messages \/ month<\/td><td>100<\/td><td>Unlimited<\/td><td>Unlimited<\/td><\/tr>\r\n        <tr><td>Campaigns \/ month<\/td><td>2<\/td><td>100<\/td><td>500<\/td><\/tr>\r\n        <tr><td>Contacts<\/td><td>100<\/td><td>Unlimited<\/td><td>Unlimited<\/td><\/tr>\r\n        <tr><td>Agents \/ organization<\/td><td>1<\/td><td>10<\/td><td>Unlimited<\/td><\/tr>\r\n      <\/tbody>\r\n    <\/table>\r\n    <\/div>\r\n    <p class=\"subtle\">Exceeding a quota returns <code>{ \"status\": \"error\", \"message\": \"You have exceeded the limit \u2026\" }<\/code> \u2014 no partial sends.<\/p>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- FINAL -->\r\n<section style=\"padding-top:0\">\r\n  <div class=\"wrap\">\r\n    <div class=\"final-band\">\r\n      <div>\r\n        <h2>Ready to build something amazing?<\/h2>\r\n        <p>Generate a token and send your first WhatsApp message in minutes.<\/p>\r\n      <\/div>\r\n      <div class=\"fcta\">\r\n        <a class=\"btn btn-orange\" href=\"https:\/\/app.whatsping.com\/register\">\ud83d\udd11 Get Your API Key<\/a>\r\n        <a class=\"btn btn-ghost-light\" href=\"#endpoints\">Browse Endpoints<\/a>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<footer>\r\n  <div class=\"wrap\">\r\n    <div class=\"foot-grid\">\r\n      <div class=\"foot-brand\">\r\n        <a href=\"\/\"><img decoding=\"async\" class=\"logo-img\" src=\"\/whatsping-site\/assets\/img\/logo-white.png\" alt=\"WhatsPing\"><\/a>\r\n        <p>One platform for WhatsApp marketing, sales &amp; support.<\/p>\r\n        <div class=\"foot-social\"><a href=\"#\" aria-label=\"Facebook\"><img decoding=\"async\" src=\"\/whatsping-site\/assets\/img\/icons\/facebook.png\" alt=\"Facebook\"><\/a><a href=\"#\" aria-label=\"Instagram\"><img decoding=\"async\" src=\"\/whatsping-site\/assets\/img\/icons\/instagram.png\" alt=\"Instagram\"><\/a><a href=\"#\" aria-label=\"LinkedIn\"><img decoding=\"async\" src=\"\/whatsping-site\/assets\/img\/icons\/linkedin.png\" alt=\"LinkedIn\"><\/a><a href=\"#\" aria-label=\"YouTube\"><img decoding=\"async\" src=\"\/whatsping-site\/assets\/img\/icons\/youtube.png\" alt=\"YouTube\"><\/a><\/div>\r\n      <\/div>\r\n      <div class=\"foot-col\"><h5>Product<\/h5><a href=\"\/features\/\">Features<\/a><a href=\"\/pricing\/\">Pricing<\/a><a href=\"\/integrations\/\">Integrations<\/a><a href=\"\/blog\/\">Blog<\/a><\/div>\r\n      <div class=\"foot-col\"><h5>Company<\/h5><a href=\"\/about-us\/\">About Us<\/a><a href=\"\/careers\/\">Careers<\/a><a href=\"\/partners\/\">Partners<\/a><a href=\"\/contact\/\">Contact<\/a><\/div>\r\n      <div class=\"foot-col\"><h5>Developers<\/h5><a href=\"\/api\/\">API Docs<\/a><a href=\"\/webhooks\/\">Webhooks<\/a><a href=\"#\">Status<\/a><a href=\"#\">Changelog<\/a><\/div>\r\n      <div class=\"foot-col\"><h5>Resources<\/h5><a href=\"#\">Help Center<\/a><a href=\"#\">Templates<\/a><a href=\"#\">Case Studies<\/a><a href=\"\/privacy-policy\/\">Privacy<\/a><\/div>\r\n    <\/div>\r\n    <div class=\"foot-bottom\"><span>\u00a9 2026 WhatsPing<\/span><span><a href=\"\/privacy-policy\/\">Privacy<\/a> \u00b7 <a href=\"\/terms-of-service\/\">Terms<\/a><\/span><\/div>\r\n  <\/div>\r\n<\/footer>\n<script>\n  (function () {\n    var root = document.documentElement;\n    document.getElementById('themeBtn').addEventListener('click', function () {\n      var cur = root.getAttribute('data-theme') || (matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');\n      root.setAttribute('data-theme', cur === 'dark' ? 'light' : 'dark');\n    });\n    \/\/ language tabs\n    document.querySelectorAll('.tab').forEach(function (t) {\n      t.addEventListener('click', function () {\n        var lang = t.dataset.lang;\n        document.querySelectorAll('.tab').forEach(x => x.classList.toggle('active', x === t));\n        document.querySelectorAll('.code').forEach(c => c.hidden = (c.dataset.lang !== lang));\n      });\n    });\n    \/\/ endpoint groups\n    document.querySelectorAll('.epbtn').forEach(function (b) {\n      b.addEventListener('click', function () {\n        var ep = b.dataset.ep;\n        document.querySelectorAll('.epbtn').forEach(x => x.classList.toggle('active', x === b));\n        document.querySelectorAll('.epsec').forEach(s => s.classList.toggle('active', s.dataset.ep === ep));\n      });\n    });\n\n    \/\/ ---- mobile hamburger menu ----\n    var hamb = document.getElementById('hambBtn');\n    var navEl = document.querySelector('.nav');\n    if (hamb && navEl) {\n      hamb.addEventListener('click', function () {\n        var open = navEl.classList.toggle('open');\n        hamb.setAttribute('aria-expanded', open ? 'true' : 'false');\n      });\n      navEl.querySelectorAll('.mobmenu a').forEach(function (a) {\n        a.addEventListener('click', function () {\n          navEl.classList.remove('open');\n          hamb.setAttribute('aria-expanded', 'false');\n        });\n      });\n    }\n\n  })();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-5548","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/whatsping.com\/bn\/wp-json\/wp\/v2\/pages\/5548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/whatsping.com\/bn\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/whatsping.com\/bn\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/whatsping.com\/bn\/wp-json\/wp\/v2\/comments?post=5548"}],"version-history":[{"count":0,"href":"https:\/\/whatsping.com\/bn\/wp-json\/wp\/v2\/pages\/5548\/revisions"}],"wp:attachment":[{"href":"https:\/\/whatsping.com\/bn\/wp-json\/wp\/v2\/media?parent=5548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}