Skip to content
RSFlowHub
Developer docs API v1 Stable OpenAPI SDKs Playground
Connect Your API to Your Chatbot: Live Data Guide

Live Data From Your API

Show live prices, stock, order status and free slots in your chatbot. Connect a Shopify or WooCommerce store with its keys, or build one endpoint that answers in our JSON format; the chatbot shows the answer as cards.

In short

A visitor asks "red shoes under 2000?". Our server recognises the question, reads your store or calls your endpoint with ?action=product_search&q=red+shoes&price_max=2000, checks the answer and shows product cards in the chat. Your keys and URL never reach the visitor's browser. It only reads: nothing is booked or changed. Each answer uses 1 credit, on the Starter plan and above.

Shopify and WooCommerce: no code

Open Dashboard > your chatbot > Live data and choose your store. A connected store answers product search, product details, categories and order status. For a private lookup the chatbot checks the visitor's phone or email against the order itself, and shows only the status, total and payment state: never a name or address.

  • WooCommerce: in WordPress go to WooCommerce > Settings > Advanced > REST API, add a key with Read permission, and paste the consumer key and secret. Your site must use https. Order lookups use the WooCommerce order ID; a plugin that changes order numbers is not supported yet.
  • Shopify: in the Shopify Dev Dashboard, under the organization your store belongs to, create an app with only read_products and read_orders, allow it customer data access so it can check the phone or email, release it and install it on your store. Paste its Client ID and secret. An older custom app's access token also works. By default Shopify lets an app read only the last 60 days of orders.

Anything else, including delivery to a pincode and your own actions, needs your own endpoint, described below.

Your own endpoint: set it up

  1. Open Dashboard > your chatbot > Live data, paste your endpoint's https URL and choose your business type. Saving creates your secret, shown once.
  2. Build the endpoint from the starter code below and press Verify endpoint.
  3. Open each action, read the format it expects, and press Run test to see the card a visitor would see, with every problem named by its field.
  4. Switch on the actions you built. For private ones, first set allowed domains.

What we send you

One URL handles everything: the action name is in ?action=. Public actions are a GET with the params in the URL. Private actions are a POST with the params in the JSON body, because a phone number in a URL ends up in access logs.

requests.http HTTP
GET /rsflowhub?action=product_search&q=red+shoes&price_max=2000&limit=5 HTTP/1.1
Host: shop.example.com
Accept: application/json
User-Agent: RSFlowHub-LiveData/1
X-RSFlowHub-Contract: 1.0
X-RSFlowHub-Action: product_search
X-RSFlowHub-Request-Id: ld_8f2c61d0a7b14e09
X-RSFlowHub-Timestamp: 1793923200
X-RSFlowHub-Signature: sha256=<hex hmac>

POST /rsflowhub?action=order_status HTTP/1.1
Content-Type: application/json
(the same headers)

{"params":{"order_id":"ORD-10482","phone":"+919876543210"}}

Check the signature on every call. It is sha256= + HMAC-SHA256 of {timestamp}.{METHOD}.{path and query}.{sha256 of the body} with your secret. Refuse a timestamp older than 5 minutes. The visitor's IP, cookies and browser details are never forwarded. If your API needs its own token too, add it under Extra login.

Starter code

This checks the signature and answers the verify call. Add one block per action. Treat every param as untrusted text and use prepared statements.

rsflowhub.php
<?php
// rsflowhub.php: put this on your site and paste its https URL into RSFlowHub.
$secret = getenv('RSFLOWHUB_SECRET'); // the lds_... secret from your dashboard

$body = file_get_contents('php://input');
$time = $_SERVER['HTTP_X_RSFLOWHUB_TIMESTAMP'] ?? '';
$sent = $_SERVER['HTTP_X_RSFLOWHUB_SIGNATURE'] ?? '';
$signed = $time . '.' . $_SERVER['REQUEST_METHOD'] . '.' . $_SERVER['REQUEST_URI'] . '.' . hash('sha256', $body);
$expected = 'sha256=' . hash_hmac('sha256', $signed, $secret);

header('Content-Type: application/json');

// Refuse anything not signed by RSFlowHub in the last 5 minutes.
if (abs(time() - (int) $time) > 300 || ! hash_equals($expected, $sent)) {
    http_response_code(401);
    exit(json_encode(['rsflowhub' => '1.0', 'status' => 'error']));
}

$action = $_GET['action'] ?? '';
// Public actions send params in the URL, private ones in the JSON body.
$params = $_SERVER['REQUEST_METHOD'] === 'POST' ? (json_decode($body, true)['params'] ?? []) : $_GET;

// The verify button: prove you hold the secret.
if ($action === 'ping') {
    exit(json_encode([
        'rsflowhub' => '1.0',
        'status' => 'ok',
        'type' => 'ping',
        'data' => ['challenge_response' => hash_hmac('sha256', $params['challenge'] ?? '', $secret)],
    ]));
}

// Add one block per action: read your database and answer in the format shown under that action.
// Use prepared statements: treat every param as untrusted text.
exit(json_encode(['rsflowhub' => '1.0', 'status' => 'error', 'message' => 'Not set up yet']));
// Express. Paste this route's https URL into RSFlowHub.
const crypto = require('crypto');
const express = require('express');
const app = express();
const secret = process.env.RSFLOWHUB_SECRET; // the lds_... secret from your dashboard

const hmac = (text) => crypto.createHmac('sha256', secret).update(text).digest('hex');

// Raw body: the signature covers the exact bytes we sent.
app.all('/rsflowhub', express.raw({ type: '*/*' }), (req, res) => {
  const body = Buffer.isBuffer(req.body) ? req.body : Buffer.alloc(0);
  const time = req.get('X-RSFlowHub-Timestamp') || '';
  const sent = Buffer.from(req.get('X-RSFlowHub-Signature') || '');
  const bodyHash = crypto.createHash('sha256').update(body).digest('hex');
  const expected = Buffer.from('sha256=' + hmac(`${time}.${req.method}.${req.originalUrl}.${bodyHash}`));

  // Refuse anything not signed by RSFlowHub in the last 5 minutes.
  const fresh = Math.abs(Date.now() / 1000 - Number(time)) <= 300;
  if (!fresh || sent.length !== expected.length || !crypto.timingSafeEqual(sent, expected)) {
    return res.status(401).json({ rsflowhub: '1.0', status: 'error' });
  }

  const action = req.query.action;
  // Public actions send params in the URL, private ones in the JSON body.
  const params = req.method === 'POST' ? JSON.parse(body.toString() || '{}').params || {} : req.query;

  // The verify button: prove you hold the secret.
  if (action === 'ping') {
    return res.json({
      rsflowhub: '1.0',
      status: 'ok',
      type: 'ping',
      data: { challenge_response: hmac(String(params.challenge || '')) },
    });
  }

  // Add one block per action: read your database and answer in the format shown under that action.
  // Use prepared statements: treat every param as untrusted text.
  res.json({ rsflowhub: '1.0', status: 'error', message: 'Not set up yet' });
});

app.listen(3000);

What you answer

Always HTTP 200 (404 and 422 are also read if the body is in this format). Only rsflowhub and status are always required. Fields we do not know are ignored and never reach a visitor.

response.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "message": "A short line above the cards",
    "data": {
        "items": [
            {
                "title": "Only the title is required"
            }
        ]
    },
    "meta": {
        "total": 14,
        "next_cursor": "p2",
        "cache_seconds": 120
    },
    "suggestions": [
        "Quick reply chips"
    ],
    "buttons": [
        {
            "label": "View all",
            "url": "https://shop.example.com/shoes"
        }
    ]
}
  • meta.next_cursor adds a Show more button; we send it back as cursor.
  • meta.cache_seconds lets us reuse a public answer, up to 60 minutes. Private answers are never cached.

Every status, and what the visitor sees

statusWhenVisitor sees
okFound it. Needs type and data.The cards
emptyThe search worked and nothing matched.Your message, or "I could not find anything for that"
not_foundUnknown id, or the order and phone do not match. Answer the same for both.The same fixed words for both, so nobody can guess orders
invalid_inputA bad param, with fields: {"pincode":"Enter a 6-digit pincode"}.Asks for that field again, in your words
closedClosed now, no delivery there, sold out, admissions shut.Your message
needs_humanA person should take over.Your message, then the Talk to Human flow
errorSomething failed on your side.The normal chatbot, or your "contact us" text for a private lookup

A 401, 403, 429, 5xx, a redirect, a slow answer (over 4 seconds), a body over 256 KB or broken JSON counts as a failure. It is logged for you and never shown to the visitor.

The 5 card types

Every action answers with one of these (or type: "text" with data.text). Each industry's sample below shows them with real fields.

typeWhat it isUsed for
itemsA list of cardsProducts, dishes, courses, doctors, flats, packages, cars, plans, offers, branches.
detailOne thing in fullOne product, property, package or vehicle.
statusWhere something standsOrder, return, appointment, booking, application, filing, service job.
slotsWhat is free and whenTables, appointments, site visits, demo classes, test drives, departures.
factsA yes/no or a small tableDelivery check, gold rates, fee breakup, EMI, on-road price, open now.

Limits: 10 items, 12 slots, 8 attributes and 4 buttons per card, title 120 characters, description 400. Over a limit is cut, not an error, and the tester warns you. Links must be https (buttons may also use mailto: and tel:), images https. HTML is removed from all text.

Actions for your industry

You build only the ones you switch on. Private ones are POSTed and ask the visitor for a reference and phone, which your API must check together. Every industry can also use branches.

actionWhat it doesAccessParamsAnswers with
product_search Find products by words, category, price or stock. Public q, category, price_min, price_max, in_stock, sort, limit, cursor items
product_detail One product in full: stock, variants, specifications. Public id* detail
categories The categories a shopper can browse. Public parent items
offers Current offers, with a code the shopper can copy. Public q items
delivery_check Whether you deliver to a pincode, how fast, and if cash on delivery works. Public pincode*, id facts
order_status Where an order is. The shopper gives the order number and their phone or email. Private order_id*, phone, email status
return_status Where a return or refund stands. Private order_id*, phone, email status
branches Your outlets with address, hours and a map link. Public q items
product_search.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "message": "Found 2 products under ₹2,000",
    "data": {
        "items": [
            {
                "id": "SKU-221",
                "title": "Red Running Shoes",
                "subtitle": "Stride",
                "description": "Lightweight mesh, sizes 6-11.",
                "image": "https://cdn.example.com/p/221.jpg",
                "url": "https://shop.example.com/p/221",
                "price": {
                    "amount": 1899,
                    "currency": "INR",
                    "compare_at": 2499
                },
                "availability": {
                    "state": "in_stock",
                    "label": "In stock"
                },
                "rating": {
                    "value": 4.4,
                    "count": 182
                },
                "badge": "24% off",
                "attributes": [
                    {
                        "label": "Size",
                        "value": "6-11"
                    }
                ],
                "buttons": [
                    {
                        "label": "Buy now",
                        "url": "https://shop.example.com/cart/add/221"
                    }
                ]
            },
            {
                "id": "SKU-305",
                "title": "Crimson Walking Shoes",
                "price": {
                    "amount": 1499,
                    "currency": "INR"
                },
                "availability": {
                    "state": "low_stock",
                    "label": "Only 3 left"
                },
                "url": "https://shop.example.com/p/305"
            }
        ]
    },
    "meta": {
        "total": 14,
        "next_cursor": "p2",
        "cache_seconds": 120
    },
    "suggestions": [
        "Delivery to my pincode",
        "Track my order"
    ],
    "buttons": [
        {
            "label": "View all",
            "url": "https://shop.example.com/shoes"
        }
    ]
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
menu_search Find dishes by words, category, veg or price. Public q, category, veg, price_max, branch, limit, cursor items
menu_categories Starters, main course, desserts and so on. Public branch items
specials What is special today. Public branch items
open_now Whether you are open right now, and until when. Public branch facts
delivery_check Whether you deliver there, how long it takes, and the minimum order. Public pincode*, branch facts
table_availability Free tables for a date and party size. Public date*, time, party_size, branch slots
order_status Where a food order is. The customer gives the order number and their phone. Private order_id*, phone* status
booking_status Whether a table booking is confirmed. Private booking_id*, phone* status
branches Your outlets with address, hours and a map link. Public q items
menu_search.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "data": {
        "items": [
            {
                "id": "d-14",
                "title": "Paneer Tikka",
                "subtitle": "Starters",
                "description": "Char-grilled paneer with mint chutney.",
                "image": "https://cdn.example.com/m/14.jpg",
                "price": {
                    "amount": 320,
                    "currency": "INR"
                },
                "availability": {
                    "state": "available",
                    "label": "Available today"
                },
                "badge": "Veg",
                "attributes": [
                    {
                        "label": "Serves",
                        "value": "2"
                    },
                    {
                        "label": "Spice",
                        "value": "Medium"
                    }
                ]
            }
        ]
    },
    "meta": {
        "cache_seconds": 300
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
course_search Your courses, with duration, mode and fees. Public q, mode items
course_detail One course in full: syllabus, duration, faculty. Public id* detail
fee_details The fee and instalments of one course. Public q* facts
batches Running and upcoming batches. Public q, branch items
demo_slots When a free demo class can be attended. Public q, date slots
admission_status Where an application stands. Asks for the application number and phone. Private application_no*, phone* status
fee_due What a student still has to pay. Asks for the student ID and phone. Private student_id*, phone* facts
branches Your outlets with address, hours and a map link. Public q items
course_search.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "data": {
        "items": [
            {
                "id": "jee-2y",
                "title": "JEE 2-year course",
                "subtitle": "Class 11 and 12",
                "price": {
                    "amount": 120000,
                    "currency": "INR",
                    "unit": "course"
                },
                "attributes": [
                    {
                        "label": "Mode",
                        "value": "Offline"
                    },
                    {
                        "label": "Starts",
                        "value": "1 April"
                    }
                ],
                "url": "https://coaching.example.com/jee"
            }
        ]
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
doctor_search Your doctors, with speciality, fee and days. Never medical advice. Public q, speciality, branch items
doctor_availability Which slots of a doctor are free on a date. Public q*, date slots
service_fees What a test or service costs. Public q items
appointment_status Whether an appointment is confirmed. Asks for the number and phone. Private appointment_id*, phone* status
report_ready Whether a report is ready to collect. Only ready or not, never the results. Private reference*, phone* status
branches Your outlets with address, hours and a map link. Public q items
doctor_search.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "data": {
        "items": [
            {
                "id": "dr-1",
                "title": "Dr. A. Mehta",
                "subtitle": "General Physician",
                "price": {
                    "amount": 500,
                    "currency": "INR",
                    "unit": "visit"
                },
                "attributes": [
                    {
                        "label": "Days",
                        "value": "Mon-Sat, 10 am to 1 pm"
                    }
                ]
            }
        ]
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
class_fees The fee of one class. Public q* facts
admission_info Whether admissions are open, dates and documents. Public q facts
events What is coming up at the school. Public q items
admission_status Where an application stands. Asks for the application number and phone. Private application_no*, phone* status
fee_due What is still to pay. Fees only, never marks or student records. Private student_id*, phone* facts
branches Your outlets with address, hours and a map link. Public q items
class_fees.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "facts",
    "data": {
        "headline": "Class 5: ₹48,000 a year",
        "result": "neutral",
        "rows": [
            {
                "label": "Instalments",
                "value": "3"
            },
            {
                "label": "Transport",
                "value": "Extra"
            }
        ]
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
property_search Find by words, type, BHK or budget. Public q, budget_min, budget_max, limit, cursor items
property_detail One property in full. Public id* detail
site_visit_slots When a site visit can happen. Public q, date slots
booking_status Where a booking stands. Asks for the booking number and phone. Private booking_id*, phone* status
branches Your outlets with address, hours and a map link. Public q items
property_search.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "data": {
        "items": [
            {
                "id": "p-1",
                "title": "Green Heights, 2 BHK",
                "subtitle": "Baner, Pune",
                "image": "https://cdn.example.com/p/1.jpg",
                "price": {
                    "text": "₹65 lakh onwards"
                },
                "availability": {
                    "state": "limited",
                    "label": "Few units left"
                },
                "attributes": [
                    {
                        "label": "Area",
                        "value": "850 sq ft"
                    },
                    {
                        "label": "Possession",
                        "value": "Dec 2027"
                    },
                    {
                        "label": "RERA",
                        "value": "P52100012345"
                    }
                ],
                "url": "https://homes.example.com/green-heights"
            }
        ]
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
service_search Your services and what they cost. Public q, gender, branch items
offers Current offers and packages. Public q items
slot_availability Which slots are free for a service on a date. Public q, date, branch slots
appointment_status Whether an appointment is confirmed. Asks for the number and phone. Private appointment_id*, phone* status
branches Your outlets with address, hours and a map link. Public q items
service_search.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "data": {
        "items": [
            {
                "id": "sv-1",
                "title": "Gold facial",
                "price": {
                    "amount": 1499,
                    "currency": "INR"
                },
                "attributes": [
                    {
                        "label": "Time",
                        "value": "60 minutes"
                    }
                ]
            }
        ]
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
plans Your plans and prices. Public branch items
class_schedule Group classes on a date. Public q, date, branch slots
trial_slots When a free trial can happen. Public date, branch slots
membership_status When a membership ends. Asks for the member ID and phone. Private member_id*, phone* status
branches Your outlets with address, hours and a map link. Public q items
plans.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "data": {
        "items": [
            {
                "id": "m-3",
                "title": "Quarterly",
                "price": {
                    "amount": 6000,
                    "currency": "INR",
                    "unit": "3 months"
                },
                "attributes": [
                    {
                        "label": "Includes",
                        "value": "Gym and group classes"
                    }
                ]
            }
        ]
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
services What you do and your charges. Public q items
document_checklist What to bring for one service. Public q* facts
consultation_slots When a consultation can happen. Public date slots
filing_status Where a filing stands. Asks for your reference and phone, never a PAN. Private reference*, phone* status
branches Your outlets with address, hours and a map link. Public q items
services.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "data": {
        "items": [
            {
                "id": "itr",
                "title": "ITR filing, salaried",
                "price": {
                    "text": "From ₹1,500"
                },
                "attributes": [
                    {
                        "label": "Time",
                        "value": "3 working days"
                    }
                ]
            }
        ]
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
package_search Find by destination, budget or days. Public q, budget_max, days, limit, cursor items
package_detail One package in full. Public id* detail
departures When a package leaves next. Public q, date slots
booking_status Where a trip booking stands. Asks for the booking number and phone. Private booking_id*, phone* status
branches Your outlets with address, hours and a map link. Public q items
package_search.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "data": {
        "items": [
            {
                "id": "mn-5",
                "title": "Manali 5 days",
                "subtitle": "Hotel, meals and sightseeing",
                "image": "https://cdn.example.com/t/5.jpg",
                "price": {
                    "amount": 18500,
                    "currency": "INR",
                    "unit": "person"
                },
                "attributes": [
                    {
                        "label": "From",
                        "value": "Delhi"
                    }
                ],
                "url": "https://travel.example.com/manali"
            }
        ]
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
metal_rates Today's rates. Always send as_of, so nobody reads an old rate as today's. Public q, city facts
product_search Find by words, metal, purity or budget. Public q, budget_max, limit, cursor items
product_detail One design in full: weight, purity, making charges. Public id* detail
order_status Where a custom order stands. Asks for the order number and phone. Private order_id*, phone* status
repair_status Whether a repair is ready. Asks for the job number and phone. Private job_id*, phone* status
branches Your outlets with address, hours and a map link. Public q items
metal_rates.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "facts",
    "data": {
        "headline": "Today's rates",
        "result": "neutral",
        "rows": [
            {
                "label": "Gold 22K",
                "value": "₹6,950 / gram"
            },
            {
                "label": "Gold 24K",
                "value": "₹7,580 / gram"
            },
            {
                "label": "Silver",
                "value": "₹92 / gram"
            }
        ],
        "as_of": "2026-11-05T09:00:00+05:30",
        "note": "Making charges and GST are extra."
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

actionWhat it doesAccessParamsAnswers with
vehicle_search Find by words, fuel or budget, new or used. Public q, condition, budget_max, limit, cursor items
vehicle_detail One vehicle in full. Public id* detail
on_road_price The on-road price of a model in a city. Public q* facts
emi_estimate A rough monthly payment. Never a promise of a loan. Public q*, down_payment, months facts
test_drive_slots When a test drive can happen. Public q, date, branch slots
booking_status Where a vehicle booking stands. Asks for the booking number and phone. Private booking_id*, phone* status
service_status Whether a vehicle is ready after service. Asks for the job number and phone. Private job_id*, phone* status
branches Your outlets with address, hours and a map link. Public q items
vehicle_search.json JSON
{
    "rsflowhub": "1.0",
    "status": "ok",
    "type": "items",
    "data": {
        "items": [
            {
                "id": "v-9",
                "title": "Compact SUV, VX",
                "subtitle": "2023, used",
                "image": "https://cdn.example.com/c/9.jpg",
                "price": {
                    "text": "₹9.4 lakh"
                },
                "attributes": [
                    {
                        "label": "Fuel",
                        "value": "Petrol"
                    },
                    {
                        "label": "Gearbox",
                        "value": "Manual"
                    },
                    {
                        "label": "Driven",
                        "value": "18,000 km"
                    }
                ],
                "url": "https://cars.example.com/v-9"
            }
        ]
    }
}

* required. The chatbot asks the visitor for it when it is missing. The Live data tab shows a sample for every action.

Actions of your own

For anything the list does not cover, add up to 5 of your own in the Live data tab: a name, the phrases that trigger it, the card type and up to 3 params. If it asks for a phone or email it is private, with all the protections below. A q text param gets the visitor's search words.

How the chatbot knows when to call

Each action has trigger phrases in English, Hindi and Hinglish, which you can replace. If none match, an intent check can still pick the action. Params are read from the message ("under 50k", "kal 7 baje", "ORD-10482"), and anything required that is missing is asked for. A live answer beats your auto reply on the same topic, unless a search comes back empty.

Security and privacy

  • Only your own endpoint: public https on port 443, no private networks, no redirects. Verifying proves you hold the secret.
  • Private lookups: your API must check the reference and the phone or email together and answer not_found if either is wrong. We stop after 3 failed tries in a chat, and also count per network and per order.
  • What is kept: for a private lookup the conversation keeps only a short line such as "Order status shown: Out for delivery", and the phone or email the visitor typed is masked. Nothing goes to the AI.
  • What you must not send: card numbers, Aadhaar, PAN, full addresses, medical results, students' marks, or anything about another person. Values that look like card, Aadhaar or PAN numbers are hidden in private answers, but that is a safety net, not your filter.
  • Tell your visitors: a phone or email given for a lookup goes to your own system. Say so in your privacy notice.

Frequently asked questions

Not on Shopify or WooCommerce: you create read-only keys in your store and paste them in. For any other system, yes: someone has to build one endpoint on your website that reads your database and answers in this format. The starter code on this page checks the signature and answers the verify step, so they only add your data.

Product search with price and stock, product details, categories and order status. Other actions, such as delivery to a pincode or your own custom actions, need your own endpoint. The keys can only read: nothing in your store can be changed.

No. Live data only reads. It can show which tables or slots are free and link to your own booking page, but nothing is created or changed in your system.

Each answer from your API uses 1 credit from your plan. A failed call, a wrong order number or a question the chatbot asks the visitor uses none. It is available on the Starter plan and above.

Visitors never see an error. For public questions the chatbot answers normally and is told not to state prices or stock. For private lookups it gives your own "contact us" message. After 5 failures in a row it stops calling for 2 minutes and emails you.

Private lookups need the reference number and the phone or email it belongs to, and your API must check both and answer the same way when either is wrong. We also stop after a few failed tries per chat, per network and per order, and private actions only work when the chatbot is locked to your website.

No. Private answers never go to the AI and their details are not stored in the conversation. In this version public answers do not go to the AI either: they are shown as they came from your API.

Ready to build?

Create your free account and make your first API call in minutes.

RSFlowHub

Sign in to continue

You'll come straight back to this page.

Forgot password?

New to RSFlowHub? Create a free account