Redirect
1. Allow the destination
Add the URL you want signers returned to under Allowed redirect URLs on your application. A submission asking to redirect anywhere else is refused at creation rather than at the end — you find out immediately, not after someone has signed.
2. Create the submission with a redirect
var submission = await docBloc.SubmissionAsync(templateId, new CreateSubmissionDTO
{
ExpiryInMinutes = 60 * 24,
Emails = new Dictionary<int, string> { [1] = customer.Email },
ExternalReference = $"order-{order.Id}",
RedirectUrl = $"https://your-app.example/orders/{order.Id}/signed",
});
// The link for recipient 1, to send them to yourself rather than waiting on our email.
string signLink = submission.Data.Workflow.First(x => x.RecipientIndex == 1).Link;3. Send them, then handle the return
Redirect the signer to signLink. When they finish, DocBloc returns them to your URL.
Do not treat the return as proof of signing. A browser redirect is a navigation, not an assertion — the signer can close the tab, lose connectivity, or arrive at your URL by other means. Treat it as a cue to show a friendly page, and take submission.completed as the truth.
// The landing page: show progress, do not record completion here.
var submissions = await docBloc.ReferenceAsync($"order-{order.Id}");
var status = submissions.Data.FirstOrDefault()?.Status;
return View(status == SubmissionStatus.Completed ? "Signed" : "AlmostThere");4. Webhook, as always
Everything in the headless guide about verifying, being idempotent and taking custody of the document applies unchanged. The redirect changes where the signer ends up, not how you learn what happened.