---
title: "Submit Estimate Signature"
method: PATCH
path: "/estimate/{estimate_uid}/signature/{signature_uid}"
---

# Submit Estimate Signature

`PATCH /estimate/{estimate_uid}/signature/{signature_uid}`

## Request

- Base URL: `https://dc-region.zuperpro.com/api`
- URL: `https://dc-region.zuperpro.com/api/estimate/{estimate_uid}/signature/{signature_uid}`
- Auth: API key in header `x-api-key`

Records the actual signature for whichever signer currently has status AWAIT_SIGNATURE — despite the generic name, only `sign_url` is settable (you cannot rename/retype a signer here). CUSTOMER signatures are rejected here (they flow through the customer portal instead). For an INTERNAL signer, the authenticated user must be that exact signer (self-sign only). When the last PENDING signer finishes and every signature is SIGNED, the estimate auto-transitions to APPROVED (stamps accepted_date, pushes a status_history entry, and triggers post-approval processing). Otherwise the next PENDING signer is advanced to AWAIT_SIGNATURE and notified (email + push).

## Path parameters

- `estimate_uid` string, required
- `signature_uid` string, required

## Request body

- object
  - `signature` object, required
    - `sign_url` string, required: URL of the captured signature image.

## Response `200`

200

## Other responses

- `400`: 400
- `404`: 404

## Changes

- **2026-11-03** `3c21bc232e16`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zuper/apis/zuper-pro-api/changes/estimate/:estimate_uid/signature/:signature_uid/patch.md)

---

[API](https://skmtc.dev/zuper/apis/zuper-pro-api.md) - [All operations](https://skmtc.dev/zuper/apis/zuper-pro-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zuper/apis/zuper-pro-api/revisions/3c21bc232e16?raw)
