{"version":"2.1.232","anchor":"per-turn-attribution-key-sent-as-tk-and-tk-is-now-a-reserved","canonical_anchor":"per-turn-attribution-key-sent-as-tk-and-tk-is-now-a-reserved","heading":"Per-turn attribution key sent as tk , and tk is now a reserved metadata name","tier":"use","area":"Telemetry","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.232\/e\/per-turn-attribution-key-sent-as-tk-and-tk-is-now-a-reserved","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.232","markdown":"### Per-turn attribution key sent as `tk`, and `tk` is now a reserved metadata name\n\n`tk` is now a reserved metadata name and stripped from your extra metadata or body.\n\n**What**\n\nRemote-controlled sessions now attach a per-turn attribution key to API request metadata as `tk`, alongside `device_id`, `session_id` and `parent_session_id`. Because of that, `tk` has been added to the list of metadata names you cannot set yourself: anything you put under that name in `CLAUDE_CODE_EXTRA_METADATA` or `CLAUDE_CODE_EXTRA_BODY` is stripped before the request is sent.\n\n**Details**\n\n- The full reserved set is `ti`, `sb`, `he`, `uf`, `ap`, `tk`; your object is filtered against it so the key cannot be spoofed.\n- The key is carried on queued user messages, propagated through agent contexts, and merged when queued prompts are combined, where the last keyed entry wins.\n- Only computed when the session is running remote-controlled (`CLAUDE_CODE_REMOTE`); omitted otherwise, and deliberately not set for cross-session inbound messages.\n\n**Evidence**\n\n`kxS = new Set([\"ti\", \"sb\", \"he\", \"uf\", \"ap\", \"tk\"]);`, `turnAttributionKey`, `CLAUDE_CODE_EXTRA_BODY`\n\n- Area: Telemetry\n- Names: `CLAUDE_CODE_EXTRA_METADATA`, `CLAUDE_CODE_EXTRA_BODY`\n- Tier: Use it now\n- Useful: 3\/5\n- Signal: 3\/5"}