# Configure inbound webhooks


> Receive supported external requests and route them into CopyHero.


Canonical URL: https://www.copyhero.app/help/integrations/inbound-webhooks

Inbound webhooks accept requests at a CopyHero-generated endpoint and use the configuration you create in **Settings → Webhooks**.

## Prerequisites [#prerequisites]

Know the external sender, payload it will send, and the CopyHero destination or workflow required by the configuration.

## Steps [#steps]

1. Open **Settings → Webhooks**.
2. Select **Inbound**.
3. Select **New Webhook**.
4. Configure the available target and request settings.
5. Save, copy the generated URL and secret only to the authorized sender, then test.

<!-- screenshot: integrations-inbound-webhook-secret -->

## Expected result [#expected-result]

The sender can call the generated endpoint and CopyHero records the received request and its outcome.

When your administrator turns on trigger grouping, requests to the same webhook for the same workflow and store in quick succession appear as one import in workflow history. Each request still starts its run right away.

## If something goes wrong [#if-something-goes-wrong]

Verify the sender uses the exact current URL and secret. Regenerate a secret if it may have been exposed, then update the sender immediately.

A signed request that includes a timestamp is accepted once, and its timestamp must be within 5 minutes of the current time. Sending the exact same request again returns HTTP `409`. To retry, sign the request again with a new timestamp. If CopyHero cannot check for repeats at that moment, the request returns HTTP `503`; send it again later.

For URL-based imports, send complete `http://` or `https://` product URLs.
CopyHero checks their format before creating any jobs. An invalid URL returns
HTTP `422` with `status: "error"` and a message identifying the input row and
field. The request is recorded in the webhook logs and the entire batch is
rejected; none of its products start importing. Correct the URL before sending
the request again. Its `eventId` values are not reserved by the rejected request.

URL validation does not fetch the page or verify that the product exists.

A failed request returns an HTTP error status and a JSON body that explains
it, either as `status: "error"` with a `message` or as a `detail`:

- `400`: the payload or its `input_data` is invalid, or the store is not found. Fix the request.
- `401`: the signature or timestamp is missing or wrong. Check the secret and signing.
- `402`: your account does not have enough credits. Each triggered run uses credits like a run you start in CopyHero. Add credits, then send again.
- `403`: the workflow belongs to another account, or the CopyHero account behind the webhook is deactivated. Check the `workflow_id`.
- `404`: the webhook or the workflow does not exist. Check the URL and the `workflow_id`.
- `413`: the request body is larger than 10 MB.
- `503` with `resource_busy`: another run on your account is using your credits right now. Wait for the seconds in the `Retry-After` header, then send it again.
- `500`: CopyHero could not process the request. Send it again later. If you sign with a timestamp, sign it again with a new timestamp, or the retry returns `409`.

## Related guides [#related-guides]

- [Configure outbound webhooks](/help/integrations/outbound-webhooks)
- [Troubleshoot failed jobs](/help/troubleshooting/retry-failed-jobs)