# issueContractSigningLink

A working signing link for ONE signer whose turn it is (`recipientId`: getContract's recipients[].id), returned once for you to pass to that signer yourself. Nothing is emailed, and the emailed link keeps working; remindContract or voidContract retires both. Opening it still asks for the code we email the signer. Never for the key owner's own signature (they sign in the app). Needs the manage contracts capability.

- Call: `POST https://server.goliathdata.com/api/v1/call` with `{ "operationId": "issueContractSigningLink", "variables": {...} }`
- Scope: `WRITE`
- Type: mutation
- Idempotency: honors `Idempotency-Key` (24 h)
- Rate-limited: no

## Variables

- `contractId`: `ID!` (required)
- `recipientId`: `ID!` (required)
- `expectedRevisionNumber`: `Int`

## Response (data, an example)

```json
{
  "contractsMutation": {
    "issueSigningLink": {
      "url": "…",
      "expiresAt": "2026-01-01T00:00:00.000Z"
    }
  }
}
```

## Example

```bash
curl https://server.goliathdata.com/api/v1/call \
  -H "Authorization: Bearer $GOLIATH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "operationId": "issueContractSigningLink",
    "variables": {
      "contractId": "<contractId>",
      "recipientId": "<recipientId>"
    }
  }'
```
