Handling Customer Data
Several WIIL APIs work with personal information and transaction records — customer identities, contact details, orders, and bookings. This guide explains how that data is accessed and the practices to follow when building on those APIs.
This is developer guidance on using the APIs securely — not legal or compliance advice. Consent, retention, and regulatory requirements are governed by your organization's privacy policy and your agreement with WIIL. See Privacy and Compliance.
Which APIs handle customer data
Treat any field that identifies or can contact a person — name, email, phone, address — as personal information.
| Category | APIs |
|---|---|
| Identity & contact | Customers, Customer Groups, Shipping Addresses, Property Inquiries |
| Communications | Communications, Outbound Calls, Outbound Emails, Outbound SMS |
| Transactions | Product Orders, Menu Orders, Service Appointments, Reservations |
Access model
All of these APIs are reached with your API key in the X-Wiil-Api-Key request header. Two things follow from that:
- Full organization access. A valid key can read and write all of your organization's resources, so it is a highly sensitive credential.
- Scoped to your organization. Requests can only reach your own organization's data — attempting to access another organization's resources returns
403 Forbidden.
See the Authentication guide for key management, rotation, and error handling.
Keep the API key server-side
Your API key must never reach the browser or a mobile client. Anyone who can read it gains full access to your organization's customer data.
- Call the customer and transaction APIs from your backend, not directly from client-side code.
- Store the key in a secret manager or environment variable — never in source control or shipped bundles.
- Use HTTPS for every request.
The chat widget is the exception that proves the rule: it runs in the browser but authenticates with data-config-id and data-route-service — not your API key (see the Widget Configuration Guide). So you can embed the widget publicly without exposing credentials, while the sensitive APIs stay behind your backend.
A typical flow:
Browser (widget / your UI)
|
v
Your backend —— X-Wiil-Api-Key ——> WIIL API (Customers, Orders, …)
Collecting information
The widget's Contact Form is the main point where the platform gathers visitor details (email or phone) before a conversation. When configuring it:
- Ask for the minimum. The form accepts an email or a phone number — require only what you actually need.
- Be clear about the ask. Use
data-contact-header-textto explain why you're collecting it, and give fields plain labels and placeholders. - Fail gracefully. Set helpful
data-contact-email-error/data-contact-phone-errormessages.
The same principle applies when creating records through the APIs: only send and store the customer fields your use case requires.
Data minimization
- Collect and retain the least information needed to serve the customer.
- Avoid copying personal data into logs, analytics, or third-party tools.
- Remove records you no longer need, in line with your retention policy.
Privacy and Compliance
Consent, retention periods, encryption, data residency, and regulatory obligations (e.g. GDPR, CCPA) are governed by your organization's privacy policy and your agreement with WIIL — they are not configured through these APIs. Consult those documents and your legal or compliance team before collecting or processing customer data.
Related
- Authentication — API keys, rotation, and auth errors
- Customers API — customer records
- Widget Configuration Guide — the embeddable chat/voice widget