- Home
- Developers
- Security
Report a vulnerability, with confidence.
Think you have found a vulnerability in sutempo, its API or npm packages? Write to us before discussing it publicly: we will fix it, then publish together if you wish.
An email, with steps to reproduce.
A clear report helps us reproduce the issue quickly. No elaborate proof of exploitation is needed: describe what you observed.
In French or English; Spanish and Portuguese are also accepted.
What we ask of you, what we do.
- Test in your own sandbox: free, isolated, with a fictional business.
- Do not access a real business’s or customer’s data; stop as soon as you have proof.
- No denial of service, load testing or social engineering.
- Give us time to fix the issue before publishing.
- No legal action for good-faith research within these rules.
- Email updates until the fix is complete.
- A credit in the changelog once fixed, if you wish.
What is covered.
In scope
sutempo.com: website, /account, /admin, /console- The API
/v1described by/openapi.json - Business pages and the widget
- The MCP server and packages
@sutempo/sdk,@sutempo/booking-flow,@sutempo/mcp - Webhooks sent by sutempo
Out of scope
- Third-party services themselves: Stripe, Google, Vercel, Neon
- Volumetric attacks and load tests
- A quota or limit reached without further impact
- A missing header without an exploitation scenario
- Other people’s accounts and data obtained through phishing
What the code already does.
Only what can be verified today.
Each pk_… key carries only explicit permissions and applies only to its assigned businesses. It is stored as a hash (scrypt) and displayed only once.
A developer can access a real business only if it is on Pro and its owner authorises access; permission can be withdrawn. The sandbox sends no real emails or payments.
Per-key, per-business and global quotas. Rate limiting per surface: public page, widget, public writes, sessions. Over the limit: 429 with Retry-After: 60.
HMAC-SHA256 over timestamp.body, in x-platform-signature: v1=… with x-platform-timestamp. HTTPS destinations only; private addresses are rejected.
An 8-digit email code valid for 10 minutes, or Google. Repeated failures are blocked for one minute. Sign out other devices in one click.
Incoming Stripe webhooks are signature-verified; an invalid signature is rejected with 400. Money goes to the business’s Stripe account.
Browser calls from unauthorised origins are rejected. A Pro business declares which websites may display its widget.
Application on Vercel, Frankfurt region; PostgreSQL database on Neon, eu-central-1 region. Customer record photos are private.
The file, in the right place.
Served as plain text at /.well-known/security.txt, following RFC 9116.
Contact: mailto:contact@sutempo.com Expires: 2027-03-29T00:00:00.000Z Preferred-Languages: fr, en, es, pt Canonical: https://sutempo.com/.well-known/security.txt Policy: https://sutempo.com/developpeurs/securite Acknowledgments: https://sutempo.com/developpeurs/changelog