> ## Documentation Index
> Fetch the complete documentation index at: https://tapace.lk/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Update template signing

> Choose the Apple certificate and Google Wallet issuer used for new passes from a template, with separate signing assignments for test and live.

Change a TapAce template's signing choices for new passes in the API key's environment. Omitted properties keep their current selection. This changes the template defaults; existing passes retain the signing choices made when they were issued.

**id** `string` *required*

The template ID.

**appleCertificateId** `string | null`

An Apple signing identity ID from your organization, or `demo` in test mode. Use `null` to clear the live selection. Test mode rejects `null`.

**googleIssuerId** `string | null`

A connected numeric Google Wallet issuer ID, or `demo` in test mode. Use `null` to clear the live selection. Test mode rejects `null`.

Use [List wallet signers](https://tapace.lk/docs/api-reference/wallet-signers/list.md) to find available choices. Live mode rejects demo signers. An unknown Apple identity, an unconnected Google issuer, or a signing choice invalid for the environment returns `422`. An inaccessible or deleted template returns `404`.

> [!NOTE]
>
> This PUT route does not provide stored-response idempotency replay. The SDK sends a key, but that does not add replay protection. Read the template's current signing selections before deciding to retry a change.

## Response

Returns HTTP `200` with the same [template signing object](https://tapace.lk/docs/api-reference/templates/get-signing.md) as the GET route.

The following request selects demo signers and requires a test API key:

```bash theme={null}
curl -X PUT https://api.tapace.lk/v1/templates/tmpl_Q4vN8xT2mLr7KpZs3Wd1/signing \
  -H "Authorization: Bearer $TAPACE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "appleCertificateId": "demo", "googleIssuerId": "demo" }'
```

## Node.js SDK

```typescript theme={null}
import { TapAce } from "@tapace/node";

export async function chooseDemoSigning(tapace: TapAce, templateId: string) {
  const account = await tapace.me.retrieve();
  if (account.environment !== "test") throw new Error("Use a test API key");
  return tapace.templates.updateSigning(templateId, {
    appleCertificateId: "demo",
    googleIssuerId: "demo",
  });
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.