Build apps for Gwiksoft businesses
Gwiksoft is an AI sales assistant for Indian businesses on WhatsApp, their website and Instagram. Apps extend what a business can do with it: send leads to the tools they already use, add bookings and catalogues, or bring a whole new workflow into their dashboard.
One part is live today: the MCP server for AI agents. Everything else on this site describes the app platform we are building: those endpoints, scopes and events cannot be called yet, and names and fields may change before release. Read it to plan your app, and request early access to build with us first.
An app appears in the business dashboard under Settings → Apps, next to the apps Gwiksoft ships today (Shopify, CRO, HubSpot, Zoho CRM, Google Sheets). A business owner installs it in two clicks, approves exactly what it may see and do, and can remove it at any time.
Building an AI agent? See Agents: connect any agent to a business’s catalogue, offers and bookings over MCP, answer its customers with your own agent, or give the Gwiksoft AI a new tool.
Status and roadmap
The platform opens in three phases. Dates follow once each phase is in testing with early-access developers.
Now
This documentation, an early-access list, and the MCP server for AI agents (live), with API keys each business creates for it. Tell us what you want to build; it decides what we build first.
Next
The REST API for leads, conversations, products, bookings and offers with the same API keys, and webhooks. For agents: “bring your own agent” for early-access partners.
Later
Install with sign-in (OAuth), screens inside the dashboard, tools for the Gwiksoft AI, app review, and listing in Settings → Apps for every Gwiksoft business.
Concepts
| Term | Meaning |
|---|---|
| Business | A Gwiksoft customer: one store, clinic or brand, with its own catalogue, chats and team. Every API call acts for exactly one business. |
| App | Your integration, described by a manifest. One app can be installed by many businesses. |
| Install | One business's approval of your app, with the scopes the owner granted. Removing the app ends the install and its access at once. |
| Scope | A permission such as leads.read. Ask for the fewest you need; owners see each one in plain words before they approve. |
| Lead | A customer who left a name and number, a booking request, a call-back request or an order intent, from any channel. |
| Conversation | One customer's chat on one channel (WhatsApp, website, Instagram, Messenger), with the AI's and the team's replies. |
| Webhook | An HTTPS call from Gwiksoft to your app when something happens, signed so you can trust it. |
Build your first app
The planned flow for a public app (Phase 3). Private apps (Phase 2) skip steps 1, 3 and 4: the business creates an API key and gives it to you.
- Register the app in the developer console with its manifest: name, redirect address, scopes, webhook address.
- Test it on a free development business that comes with sample products, chats and leads.
- Send the owner to install: your “Connect to Gwiksoft” button opens the install screen; the owner approves; you receive a code and exchange it for tokens.
- Submit for review; once approved the app is listed in Settings → Apps.
- Call the API and receive webhooks for each business that installed it.
# 1. A lead arrives: your webhook receives it POST https://your-app.example.com/gwiksoft/webhooks X-Gwiksoft-Event: lead.created X-Gwiksoft-Signature: t=1793722000,v1=5f0c… # 2. You read the conversation it came from GET https://api.gwiksoft.com/v1/conversations/conv_8kq2…/messages Authorization: Bearer gwk_at_…
App manifest
The manifest describes your app. You keep it in your code as gwiksoft.app.json and upload it when you register or update the app.
{
"name": "ShipNow Tracker",
"handle": "shipnow-tracker",
"description": "Shows delivery status for every order, and tells customers on WhatsApp.",
"developer": { "name": "ShipNow Pvt Ltd", "email": "apps@shipnow.example", "website": "https://shipnow.example" },
"category": "Orders and delivery",
"icon": "https://shipnow.example/icon-512.png",
"auth": {
"redirect_urls": ["https://shipnow.example/gwiksoft/callback"]
},
"scopes": ["leads.read", "conversations.read", "messages.send"],
"webhooks": {
"url": "https://shipnow.example/gwiksoft/webhooks",
"events": ["lead.created", "order.intent", "app.uninstalled"]
},
"screens": [
{ "id": "home", "title": "Deliveries", "url": "https://shipnow.example/gwiksoft/app" }
],
"privacy_policy": "https://shipnow.example/privacy",
"support": "support@shipnow.example"
}
| Field | Rules |
|---|---|
handle | Lower-case letters, digits and hyphens, unique, cannot change after release. |
scopes | Only what the app uses. Asking for more fails review. |
auth.redirect_urls | HTTPS only, exact match, at most five. |
screens | Optional. HTTPS pages shown inside the dashboard (see screens). |
privacy_policy | Required for public apps: what you store, for how long, and how a business asks you to delete it. |
Install and sign-in (OAuth 2.0)
Public apps use the OAuth 2.0 authorization-code flow. The business owner, signed in to Gwiksoft, sees your app, the scopes in plain words, and approves.
1. Send the owner to the install screen
https://business.gwiksoft.com/oauth/authorize
?client_id=app_9f3k2…
&redirect_uri=https%3A%2F%2Fshipnow.example%2Fgwiksoft%2Fcallback
&scope=leads.read%20conversations.read%20messages.send
&state=random-value-you-check-on-return
2. Exchange the code for tokens
POST https://api.gwiksoft.com/v1/oauth/token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=…&client_id=app_9f3k2…&client_secret=…&redirect_uri=…
{
"access_token": "gwk_at_…",
"token_type": "Bearer",
"expires_in": 86400,
"refresh_token": "gwk_rt_…",
"scope": "leads.read conversations.read messages.send",
"business": { "id": "biz_4tq8…", "name": "Carat Jewels", "slug": "carat-jewels" }
}
3. Refresh before it expires
Access tokens last 24 hours; refresh tokens 90 days and rotate on every use. Send grant_type=refresh_token to the same endpoint. When the owner removes your app, both stop working and you receive app.uninstalled.
Private apps and API keys
A business that wants to connect its own systems (its ERP, a billing tool, a script) does not need a public app. In Phase 2 the owner creates an API key in Settings → Apps → Developer, chooses its scopes, and can revoke it at any time.
GET https://api.gwiksoft.com/v1/leads?since=2026-11-01T00:00:00Z Authorization: Bearer gwk_live_…
Keys are shown once, start with gwk_live_ (or gwk_test_ for a development business), and belong to one business. Keep them on your server, never in a website or app that customers download.
Permissions (scopes)
| Scope | What the owner sees | Allows |
|---|---|---|
business.read | See your business name, hours and settings | GET /business |
leads.read | See your leads | GET /leads, lead webhooks |
leads.write | Add leads and update their status | POST, PATCH /leads |
conversations.read | Read your customer chats | GET /conversations, message webhooks |
messages.send | Send messages to your customers as your team | POST /conversations/{id}/messages |
products.read / products.write | See / change your catalogue | /products |
bookings.read / bookings.write | See / confirm or cancel visits and appointments | /bookings, booking webhooks |
offers.read / offers.write | See / change your offers | /offers |
agent.respond | Answer your customers with this app’s own AI agent | Bring your own agent |
tools.provide | Let your Gwiksoft AI use this app’s tools | Tools for the Gwiksoft AI |
Customer phone numbers and message text are personal data. Ask for conversations.read only when your app needs them, and see policies.
Screens inside the dashboard
A screen is your own web page, shown inside the business dashboard when the owner opens your app (Phase 3). It loads in a frame at the address in your manifest, with a short-lived session token:
https://shipnow.example/gwiksoft/app?business=biz_4tq8…&session=eyJhbGciOiJIUzI1NiJ9…
- Verify the session with your client secret (HS256):
audis your client id,business_idthe business,subthe signed-in user,expone minute ahead. - Exchange it at
POST /v1/oauth/tokenwithgrant_type=urn:ietf:params:oauth:grant-type:token-exchangefor an access token for that business. - Fit in: work at phone width (most owners use the dashboard on their phone), load quickly, and follow the light and dark theme passed as
theme=. - Frames are allowed only from
https://business.gwiksoft.com: sendContent-Security-Policy: frame-ancestors https://business.gwiksoft.com.
Agents and Gwiksoft
Every Gwiksoft business has its MCP server today. “Bring your own agent” and tools for the Gwiksoft AI are planned: their addresses, names and fields may change before release.
Every Gwiksoft business already has an AI sales assistant answering on WhatsApp, its website and Instagram. Agents can work with it in three ways:
| Way | You build | Good for | Phase |
|---|---|---|---|
| MCP server | An agent anywhere (your app, ChatGPT, Claude, Gemini) that connects to a business’s Gwiksoft MCP server | Shopping assistants, comparison agents, voice assistants, agencies’ own agents | Live |
| Bring your own agent | An agent that answers a business’s customers on Gwiksoft’s channels instead of the built-in AI | Specialist agents (insurance, real estate, education) with their own reasoning | 2 (early access) |
| Tools for the Gwiksoft AI | An endpoint the built-in AI calls in the middle of a chat | Delivery dates, EMI and gold-rate calculators, ring-size guides, stock in another system | 3 |
In all three, Gwiksoft keeps what businesses rely on: the channels and WhatsApp rules, the team inbox, hand-off to a person, follow-ups, and the same honesty checks on every reply.
Gwiksoft connector for AI assistants live
One connector for every Gwiksoft business: a shopper’s AI assistant finds businesses that sell what they want, compares real products and prices, reads each business’s live offers and policies, gets a link to the store’s own checkout, and, where a business accepts them, sends an enquiry or a visit request to its team.
https://mcp.gwiksoft.com/mcp # Streamable HTTP, no sign-in
Add it to your assistant
- Claude (web and desktop): Settings → Connectors → Add custom connector, and paste the address.
- ChatGPT: where your plan allows custom connectors (developer mode), add a connector with the address.
- Gemini: Connected apps → add a custom MCP server with the address, where your account offers it.
- Perplexity: Plugins (or Customize → Connectors) → Add custom → MCP connector → Remote, with authentication “None”.
- Claude Code:
claude mcp add --transport http gwiksoft https://mcp.gwiksoft.com/mcp
Then ask, for example: “Find a lab-grown diamond solitaire ring under ₹80,000”, “Which Gwiksoft stores sell wall-hung basins? Show me three”, or “What is Carat Story’s return policy?”.
Tools
| Tool | Does |
|---|---|
find_businesses | Businesses that sell what the shopper wants, optionally in a city (online stores are always included), with a few matching products from each. Returns the business id the other tools take. |
get_business, search_products, list_collections, get_product, list_offers, ask_business, start_checkout | The same as on a business’s own server (below), with a business argument. |
create_lead, request_visit, hand_off_to_team | For businesses that take requests through AI assistants (Gwiksoft’s Agentic Sales). The shopper’s name and phone, shared by the shopper to be contacted, reach the business’s team. Other businesses answer with their WhatsApp and chat links. |
Every tool has a title and read-only, destructive and open-world hints, an input schema and an output schema. The connector offers one prompt, shopping_assistant.
Limits, privacy and support
- 60 requests a minute per caller; 10 enquiries, visit requests and hand-offs an hour per caller, and 20 an hour per business.
- No sign-in, no cookies, no conversation history. Contact details are sent only when the shopper asks to contact a business. Privacy policy.
- Checkout and payment happen on the store’s own website; the connector never handles payment details.
- Help: support@mail.gwiksoft.com · +91 70334 88174.
Businesses on Gwiksoft control it in their dashboard: Sales channels → Agentic Sales, or Settings → Apps → AI agents.
MCP server per business live
Each business has a Model Context Protocol server, so any MCP-capable agent can shop it the way a customer does in its chat: the same catalogue and prices, the live offers, and requests that reach the team.
https://mcp.gwiksoft.com/b/{business-slug} # Streamable HTTP, stateless JSON
The slug is the one in the business’s chat link (shop.gwiksoft.com/{business-slug}). The owner can switch the server off in Settings → Apps → AI agents; it then answers 404.
Tools
| Tool | Does | Access |
|---|---|---|
get_business | Name, location, opening hours, how it sells (showroom, online store, bulk), WhatsApp link, chat link, whether it takes visits and has an online checkout | Open |
search_products | Search the whole catalogue by the customer’s words and a budget (min_price, max_price in rupees); prices, options, stock, links, the live offers, and next_cursor for more | Open |
list_collections | The catalogue’s collections or categories, each with a product count, the lowest price and a photo: what to show a customer before searching | Open |
get_product | One product in full with every option’s choices. For Shopify stores, pass the customer’s choices as options ({"Color": "Rose Gold"}) to get that variant’s id, price and stock | Open |
list_offers | Live offers with their real end dates and terms: the only offers that exist | Open |
ask_business | Delivery, returns, payment, warranty and other questions, answered from what the business published: its FAQs, its website and, for Shopify stores, the store’s own policies. Never its private notes to the AI | Open |
start_checkout | Shopify stores: a link that opens the store’s own cart with the chosen variants, in the customer’s browser, and the total. The store confirms stock and the final price at checkout; nothing is ordered or charged here. Other businesses answer with how to buy instead | Open |
create_lead | Pass a customer’s enquiry or call-back request to the team, with the product they want | Key, leads.write |
request_visit | Ask for a store visit or appointment (name, phone, day, time, product); it lands on the business’s Appointments board as pending and the team confirms. Not for online-only stores | Key, bookings.write |
hand_off_to_team | Give the customer to a person, with a summary (and the transcript, if the customer agreed) | Key, leads.write |
Every tool declares an outputSchema and returns structuredContent. The server also offers one prompt, shopping_assistant, which sets an agent up to shop the business honestly: one question at a time, real prices only, checkout or a visit at the end.
Open tools need no key and read only what the business already shows customers on its chat page. Tools that reach the team are part of Agentic Sales, on Gwiksoft’s Pro plan: they are listed only for businesses that have it, and need one of the business’s API keys with the scope shown. Leads from agents appear in the business’s Leads and Appointments as AI agent, with your key’s name.
API keys
The business owner creates keys in Settings → Apps → AI agents, chooses their scopes (leads.write, bookings.write) and can revoke them at any time. A key looks like gwk_live_ followed by 32 letters and digits, is shown once, and works only for its own business. Send it on every request:
Authorization: Bearer gwk_live_…
A missing, wrong or revoked key does not stop browsing: the keyed tool answers with an error that says what is missing.
Limits and errors
- 60 requests a minute per caller and business; more answers HTTP 429.
- 30 leads, visit requests and hand-offs an hour per key.
- A wrong argument, an unknown product or the store being briefly unreachable is a tool result with
isError: trueand a sentence your agent can act on, not a protocol error. - No sessions and no server-sent stream:
GETanswers 405.
Connect
# Claude Code
claude mcp add --transport http my-store https://mcp.gwiksoft.com/b/{business-slug}
// Node.js, with the official MCP SDK: npm install @modelcontextprotocol/sdk import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; const client = new Client({ name: 'my-shopping-agent', version: '1.0.0' }); await client.connect(new StreamableHTTPClientTransport( new URL('https://mcp.gwiksoft.com/b/{business-slug}'), { requestInit: { headers: { Authorization: 'Bearer gwk_live_…' } } } // only for keyed tools )); const found = await client.callTool({ name: 'search_products', arguments: { query: 'oval solitaire ring', max_price: 80000, limit: 5 }, });
// search_products result (structuredContent)
{
"products": [{
"id": "gid://shopify/Product/8500339310677", "title": "Classic Oval",
"price": 77813, "price_max": null, "compare_at_price": null, "currency": "INR", "price_label": "₹77,813",
"collections": ["Solitaire Rings"],
"options": [{ "name": "Color", "values": ["Yellow Gold", "Rose Gold", "White Gold"] }],
"in_stock": true,
"url": "https://store.example/products/classic-oval",
"image": "https://cdn.shopify.com/…/classic-oval.png",
"description": "A timeless solitaire with a graceful, elongated silhouette…"
}],
"offers": [{ "title": "Wedding season try-on week", "discount": "10% off making charges", "applies_to": "everything", "ends_at": "2026-11-20T18:29:59.000Z" }],
"next_cursor": "eyJzaG9wIjoi…"
}
Assistants that accept remote MCP servers (as a “connector” or “custom tool”) can use the same address. On Shopify stores, Shopify also offers its own catalogue and cart endpoint on the store’s domain; the Gwiksoft server adds non-Shopify catalogues, the business’s offers, visits, the team hand-off and its rules.
Bring your own agent
With the agent.respond scope, your agent answers the business’s customers. Gwiksoft still receives every message on WhatsApp, the website and Instagram, and still runs the inbox, the hand-off to a person, follow-ups and the checks; your agent decides what to say.
1. Gwiksoft sends you the customer’s message
POST https://your-agent.example.com/gwiksoft/respond
X-Gwiksoft-Event: conversation.message
X-Gwiksoft-Signature: t=1793722000,v1=…
{
"event": "conversation.message",
"business_id": "biz_4tq8…",
"conversation": { "id": "conv_8kq2…", "channel": "whatsapp", "language": "hinglish" },
"customer": { "name": "Asha", "returning": false, "city": "Hyderabad" },
"message": { "id": "msg_9…", "text": "Engagement ring dikhao 70k ke andar" },
"history": [ { "from": "ai", "text": "Hi! How can I help?" } ],
"context": {
"viewed_on_website": ["Oval Halo Ring"],
"offers": [{ "title": "Wedding season try-on week", "ends_at": "2026-11-20T23:59:59+05:30" }]
},
"respond_by": "2026-11-03T15:55:00Z"
}
2. Your agent answers
Answer the webhook directly within 20 seconds, or reply later with POST /v1/conversations/{id}/messages:
{
"text": "Yeh teen solitaire rings ₹70,000 ke andar hain:",
"products": ["prod_7h1…", "prod_2c4…", "prod_9d8…"],
"question": "Kaunsa design pasand aaya?",
"buttons": ["Book a store visit", "View more products"],
"handoff": false
}
- Products are product ids; Gwiksoft turns them into cards (website) or photos with links (WhatsApp), and adds “View more products” when there are more.
- Buttons: up to 3, at most 20 characters each (WhatsApp’s limit).
- handoff: true gives the chat to the team and alerts their phones.
- If your agent does not answer by
respond_by, the business’s fallback answers: the Gwiksoft AI, or a short “we’ll get back to you”, as the business chose. - Before sending, Gwiksoft checks your reply like its own: prices against the catalogue, offers against the live list, no pressure. A failing reply is corrected or sent to the team, and the reason is in the webhook log.
Tools for the Gwiksoft AI
Your app can give the built-in AI a tool. It appears to the business in Settings → Apps; once switched on, the AI calls it when a customer’s question needs it.
// in gwiksoft.app.json
"tools": [{
"name": "delivery_estimate",
"description": "Delivery date for a pincode. Use when a customer asks when an order would arrive.",
"input_schema": {
"type": "object",
"properties": { "pincode": { "type": "string", "pattern": "^[1-9][0-9]{5}$" } },
"required": ["pincode"]
},
"url": "https://shipnow.example/gwiksoft/tools/delivery-estimate"
}]
POST https://shipnow.example/gwiksoft/tools/delivery-estimate
X-Gwiksoft-Signature: t=…,v1=…
{ "tool": "delivery_estimate", "arguments": { "pincode": "500034" },
"business_id": "biz_4tq8…", "conversation_id": "conv_8kq2…" }
// your answer, within 5 seconds
{ "result": { "earliest": "2026-11-06", "latest": "2026-11-08", "cod": true } }
- Write the
descriptionfor the AI: when to use the tool, not what your company does. - Return facts, not sentences; the AI words the answer in the customer’s language.
- A tool that is slow or fails is skipped and the AI answers without it; repeated failures switch the tool off and tell the business.
Rules for agents
- Say it is an AI when a customer asks, and never pretend to be a named person.
- Only real facts: prices, stock and offers from the tools or the catalogue; no invented discounts, deadlines, stock levels or popularity.
- Hand over when the customer asks for a person, when unsure, or for complaints, refunds and legal matters.
- Respect the channel: WhatsApp’s 24-hour window and templates, “STOP” always honoured, no messages to people who did not contact the business.
- Personal data stays with the business: do not keep customers’ messages or numbers beyond answering, and never use one business’s data for another.
- Be fast: customers wait for the first answer; aim for under 5 seconds, and answer what you can before slower work.
API basics
- Base address:
https://api.gwiksoft.com/v1. JSON in, JSON out, UTF-8. - Authentication:
Authorization: Bearer <token or key>. Every token acts for one business. - Lists return
{ "data": [...], "next_cursor": "…" }; passcursorfor the next page,limitup to 100. - Times are ISO 8601 in UTC; money is in rupees as a number (
58000) withcurrency: "INR". - Safe retries: send
Idempotency-Keyon POST requests; the same key within 24 hours returns the first result.
Business
{
"id": "biz_4tq8…", "name": "Carat Jewels", "slug": "carat-jewels",
"industry": "jewellery", "sales_motion": "showroom",
"timezone": "Asia/Kolkata",
"hours": { "mon": ["12:00", "20:00"], "sun": ["12:00", "20:00"] },
"channels": ["whatsapp", "web", "instagram"]
}
Leads
Filters: since, status (new, contacted, converted, closed), intent (appointment_request, order_intent, callback, general_lead), channel, tag.
{
"data": [{
"id": "lead_2m9x…",
"created_at": "2026-11-03T15:54:36Z",
"name": "Asha Rao", "phone": "+9198XXXXXX10",
"intent": "appointment_request",
"status": "new",
"channel": "whatsapp",
"conversation_id": "conv_8kq2…",
"product": { "id": "prod_7h1…", "title": "Oval Halo Ring", "price": 64500 },
"requested_slot": { "date": "2026-11-07", "time": "Afternoon" },
"tags": ["wedding"], "location": { "city": "Hyderabad" }
}],
"next_cursor": null
}
Add a lead from another source (a call, a walk-in, a form). Same fields; source is required and shown in the dashboard.
Change status, tags or add a note. Each change is recorded on the lead with your app's name.
Conversations and messages
Filters: channel, since, status (ai, team, waiting).
{
"data": [
{ "id": "msg_1…", "from": "customer", "text": "Show me solitaire rings", "at": "2026-11-03T15:54:36Z" },
{ "id": "msg_2…", "from": "ai", "text": "Here are a few solitaire rings…", "products": ["prod_7h1…"], "at": "2026-11-03T15:54:39Z" },
{ "id": "msg_3…", "from": "team", "text": "Would Saturday work for a visit?", "at": "2026-11-03T16:01:12Z" }
]
}
{ "text": "Your order has shipped. Track it here: https://shipnow.example/t/AB12" }
Sent as the business's team, on the conversation's channel. On WhatsApp a free-form message is possible only within 24 hours of the customer's last message; after that, send an approved template with {"template": {"name": "...", "language": "en", "params": [...]}}. The AI steps back from a conversation your app writes in, as it does for a person.
Products
{
"title": "Oval Halo Ring",
"price": 64500, "mrp": 69000, "currency": "INR",
"collection": "Women's Solitaire Rings",
"images": ["https://cdn.example/oval-halo.jpg"],
"options": [{ "name": "Metal", "values": ["18K White Gold", "18K Yellow Gold"] }],
"stock_status": "in_stock",
"url": "https://caratjewels.example/products/oval-halo"
}
For businesses whose catalogue lives in Shopify, products are read-only here: change them in Shopify and Gwiksoft follows.
Bookings
{ "status": "confirmed", "at": "2026-11-07T11:30:00+05:30", "note": "Ask for Priya at the counter" }
Confirming sends the customer a confirmation on their channel, and a reminder the day before.
Offers
{
"title": "Wedding season try-on week",
"discount": "10% off making charges",
"applies_to": "Solitaire rings and studs",
"starts_at": "2026-11-10T00:00:00+05:30",
"ends_at": "2026-11-20T23:59:59+05:30",
"terms": "Not with other offers."
}
The AI quotes live offers with their real end dates and never invents one, so an offer your app creates is what customers hear about.
Webhooks
| Event | When | Scope |
|---|---|---|
lead.created | A customer leaves a name and number, books, asks for a call or to buy | leads.read |
lead.updated | Status, tags or notes change | leads.read |
booking.requested / booking.updated | A visit or appointment is asked for, confirmed, moved or cancelled | bookings.read |
order.intent | A customer taps Buy now on a product | leads.read |
conversation.message | A customer sends a message | conversations.read |
conversation.handoff | The AI hands a chat to the team | conversations.read |
app.uninstalled | The owner removes your app | always |
POST https://shipnow.example/gwiksoft/webhooks
Content-Type: application/json
X-Gwiksoft-Event: lead.created
X-Gwiksoft-Delivery: dlv_5c8…
X-Gwiksoft-Signature: t=1793722000,v1=5f0c4a…
{ "event": "lead.created", "business_id": "biz_4tq8…", "created_at": "2026-11-03T15:54:40Z",
"data": { "lead": { "id": "lead_2m9x…", "intent": "appointment_request", "…": "…" } } }
Check the signature
// Node.js import crypto from 'node:crypto'; function verify(rawBody, header, secret) { const { t, v1 } = Object.fromEntries(header.split(',').map((p) => p.split('='))); if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false; // older than 5 minutes const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex'); return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1)); }
Answer within 10 seconds with any 2xx. Failed deliveries are retried 6 times over 24 hours with growing gaps; use X-Gwiksoft-Delivery to ignore a repeat.
Errors and limits
{ "error": { "code": "scope_missing", "message": "This app was not granted messages.send." } }
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | A field is missing or wrong; message says which. |
| 401 | invalid_token | Expired, revoked or wrong token. |
| 403 | scope_missing | The install does not include the scope. |
| 404 | not_found | No such record for this business. |
| 409 | window_closed | WhatsApp's 24-hour window has closed: send a template. |
| 429 | rate_limited | Over 60 requests a minute for one install; wait for Retry-After. |
App review and policies
Public apps are reviewed before they are listed. An app passes when it:
- Asks for the least it needs. Every scope must be used, and explained in your listing.
- Handles personal data under India's DPDP Act: customer names, numbers and messages are the business's data. Store only what you need, keep it encrypted, and delete it within 30 days of
app.uninstalledor on the business's request. - Follows WhatsApp's rules: no messages to people who did not contact the business, templates outside the 24-hour window, and “STOP” always respected.
- Does not pressure customers: no invented deadlines, stock levels, discounts or popularity. These are dark patterns under India's 2023 consumer guidelines, and the Gwiksoft AI is held to the same rule.
- Is secure: HTTPS everywhere, secrets on your server, signatures checked on every webhook.
- Is supported: a working support address that answers within two business days.
Early access
We are choosing a small group of developers and agencies to build the first apps with us in Phase 2. Tell us what you want to build, for which kind of business, and which parts of the API it needs.
- Email:
support@mail.gwiksoft.comwith the subject “App platform early access” - WhatsApp or call:
+91 70334 88174 - Or book a call: gwiksoft.com/book
FAQ
Can I call any of this today?
No. This is a developer preview of the platform we are building. Early-access developers get the Phase 2 API first.
We are a business on Gwiksoft and want our ERP connected now. What can we do?
Gwiksoft already syncs leads to HubSpot, Zoho CRM and Google Sheets from Settings → Apps. For anything else, write to us: we can build a connection, and it helps shape the API.
Will apps be paid?
Listing is free. You decide your own pricing for businesses; billing through Gwiksoft comes later.
Does my app see the AI's internal reasoning or other businesses' data?
No. An install sees only the business that installed it, and only through the scopes the owner granted.
Can my agent be listed in ChatGPT or Claude and sell for many stores?
Yes: connect it to each business’s MCP server. Open tools let it search and start checkout for any Gwiksoft business; booking visits and passing leads needs that business’s API key.
Is there a sandbox?
Yes, planned for Phase 2: a free development business with sample products, chats and leads, and gwk_test_ keys that never message real customers.