Feedback and bug reports
Reports that explain themselves.
Feedback with a rating and bug reports with steps, screenshots and your own fields, from any app, in your own forms.

The context comes with it.
The page it was sent from, the version, browser, system, device and country arrive with every report, so nobody has to ask.
- Steps to reproduce and the expected result
- Up to three attachments: images, text or JSON
- The type of a file is read from its bytes, never its name

Your fields, not ours.
Add fields to bug reports, feedback or messages per app: text, choices, numbers, dates, checkboxes or JSON, optional or required.
Your own fields
Built for the public.
The forms take requests from anyone on the internet, so they are built to keep spam out.
- A honeypot field bots fill and people never see
- Cloudflare Turnstile, when you set a secret
- Rate limits and daily caps per app
- A spam status that deletes after 30 days
The form definition, to render a form from
const { fields } = await logsure.form('bug');
// [{ key: 'plan', label: 'Plan', type: 'select',
// options: ['Free', 'Pro', 'Team'] }, …]
await logsure.bug({
title, description,
fields: { plan: 'Pro', platform: 'macOS' },
website: '', // the honeypot, left empty
});How it works.
Add the script
The tracker gives the page window.logsure with a function for each kind of request.
<script defer data-app="acme-notes"
src="/_care/script.js"></script>
Send from your form
Each call resolves to the answer, or rejects with the reason.
await logsure.feedback({
message: 'Love the new editor',
rating: 5,
email: '[email protected]',
});
Or from anywhere
Native apps and back-ends post the same JSON with the app's server key.
curl -X POST https://logsure.example.com/_care/bug \
-H "authorization: Bearer $LOGSURE_KEY" \
-H 'content-type: application/json' \
-d '{"app":"acme-notes","title":"…",
"description":"…"}'
Read the forms docs.Feedback, bug reports and waitlistsThe ingest API