# Correct a partner's details

`PATCH /lokta-lms/api/v1/sourcing-partners/{id}`

Corrects the details of a sourcing partner.

**Null means "leave alone", never "clear".** A form carrying three fields must not erase the twenty it has no input for. To blank a value, send an empty string.

**`status` is not accepted here.** A partner is activated and deactivated through `…/activation`, where the change carries a reason and lands in the status history; allowing it on a PATCH would let the one transition anybody audits happen as a silent field assignment.

`external_id` may be corrected, so a typo at onboarding is not permanent; uniqueness still applies (`409 sourcing/external_id_taken`).

`details` merges column by column and is created if the partner never had one; a partner given a PAN today must not lose the GSTIN somebody added last week. `gst_treatment` is re-derived whenever the GSTIN changes, because it is a consequence of that field rather than an independent one; leaving it stale would put a partner on forward charge with no GSTIN, or the reverse.

## Parameters
- `id` (path, string, required): Opaque partner id, spr_…
- `Idempotency-Key` (header, string): Per-intent key

## Request body (application/json)
- `external_id` (string): The partner's external id. Uniqueness still applies.
- `details` (object): Merged column by column. Null leaves a value alone; an empty string blanks it.

## Responses
- `default`: default response

## Example request (cURL)
```bash
curl -X PATCH \
  'https://default.lokta.tech/lokta-lms/api/v1/sourcing-partners/{id}' \
  -u '{username}:{password}' \
  -H 'Tenant-Identifier: default' \
  -H 'Content-Type: application/json' \
  -d '{
  "external_id": "string",
  "details": {}
}'
```

Interactive: https://developer.lokta.ai/reference#operation/update_8
