Skip to content
Scalpels home

Scalpels is officially launching on October 31, 2026. Special early adopter pricing is available now.

← All documentation

Documentation

Bobbin

Troubleshooting

Updated

Every page returns 403 after signing in

If a user who was already signed in before this fix still receives 403, sign out and sign back in once to complete enrolment. Bobbin enrols the authenticated account into this installation's team on its first successful sign-in.

create-admin says an Owner already exists

Sign in with the existing Owner, or create another operator by rerunning the command with --force, then have that account sign in. Bobbin enrols each successfully authenticated account into the same installation team.

The provider says delivery failed, or no capture appears

  • Check the URL the provider is using against the Capture URL on the endpoint page. An unknown identifier returns 404 and nothing is stored.
  • Bobbin always answers a stored request with 204 No Content and an empty body. A provider that requires a particular response body or a 200 specifically will treat that as a failure even though the capture was stored.
  • Check https://<your-host>/up returns 200. If it does not, look at the deployment in Laravel Cloud.

A capture has expired

Captures older than the endpoint's retention days are deleted by the daily cleanup, together with their delivery history. They cannot be recovered. Raise Retention days on the endpoint's Security settings page before you need the data.

Old captures are not being deleted

The cleanup runs on Laravel Cloud's scheduler. Make sure the scheduler is still enabled on the environment, or run php artisan captures:prune from Laravel Cloud.

Secrets appear in old captures

Redaction applies only to requests received after you change the settings. Captures stored earlier keep their original values until retention removes them. Lower Retention days if you need them gone sooner; the next daily cleanup deletes everything outside the new window.

The destination is rejected

The form shows The destination must be an absolute HTTP or HTTPS URL with a publicly routable host. Check that the URL:

  • starts with http:// or https://;
  • has a host that resolves in DNS, and only to public addresses (not localhost, 127.0.0.1, 10.x, 192.168.x, 172.16–31.x or other private or reserved ranges);
  • contains no user:password@, no #fragment and no { or }.

A deployed Bobbin cannot replay to your laptop or a private network. Deploy the receiver somewhere public, or put it behind a public URL you control.

There is no Queue replay button

The capture page shows that the endpoint needs exactly one active destination. Save a destination on Security settings.

If the settings page says the endpoint has multiple active destinations and the form is disabled, the endpoint's data is inconsistent and Bobbin blocks configuration and replay for it until the data is repaired in the database. The agent tools report this as destination_state: conflict.

A replay stays queued

Replays run on the managed queue. In Laravel Cloud, check that the environment's managed queue exists, is the default queue and is processing jobs. Do not set QUEUE_CONNECTION yourself.

A delivery waiting between retries also shows queued; its Attempts count and Latest safe error tell you which case you are in.

A replay fails

Read Response status and Latest safe error in the delivery history:

Error Meaning
Destination returned HTTP 3xx. The destination redirected. Redirects are never followed; use the final URL as the destination.
Destination returned HTTP 4xx. The destination refused the request. A common cause is a signature or credential check failing on a redacted header or body, or on a signature that has expired since the provider sent it.
Destination returned HTTP 5xx. or 429 The destination errored or throttled on all four attempts.
Destination connection failed. Bobbin could not connect, or the destination took longer than 15 seconds to respond, on all four attempts.
Destination is no longer safe to contact. The destination host now resolves to a non-public address.
Cannot safely replay a redacted Connection header. The capture was stored with its Connection header redacted. It cannot be replayed.
Delivery failed after an unexpected queue error. The queue job itself failed. Check the application logs in Laravel Cloud, then queue the replay again.

The destination received the same request twice

Delivery is at-least-once. If a destination processed a request but Bobbin did not record the 2xx (for example, the response was slow), Bobbin retries it. Each Queue replay click is also a separate delivery. Make receivers idempotent, for example by recording the provider's event identifier.