## Generate Pre Shared Key (PSK) for IPsec tunnels `magic_transit.ipsec_tunnels.psk_generate(stripsec_tunnel_id, IPSECTunnelPSKGenerateParams**kwargs) -> IPSECTunnelPSKGenerateResponse` **post** `/accounts/{account_id}/magic/ipsec_tunnels/{ipsec_tunnel_id}/psk_generate` Generates a Pre Shared Key for a specific IPsec tunnel used in the IKE session. Use `?validate_only=true` as an optional query parameter to only run validation without persisting changes. After a PSK is generated, the PSK is immediately persisted to Cloudflare's edge and cannot be retrieved later. Note the PSK in a safe place. ### Parameters - `account_id: str` Identifier - `ipsec_tunnel_id: str` Identifier - `body: object` ### Returns - `class IPSECTunnelPSKGenerateResponse: …` - `ipsec_tunnel_id: Optional[str]` Identifier - `psk: Optional[str]` A randomly generated or provided string for use in the IPsec tunnel. - `psk_metadata: Optional[PSKMetadata]` The PSK metadata that includes when the PSK was generated. - `last_generated_on: Optional[datetime]` The date and time the tunnel was last modified. ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.magic_transit.ipsec_tunnels.psk_generate( ipsec_tunnel_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", body={}, ) print(response.ipsec_tunnel_id) ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "result": { "ipsec_tunnel_id": "023e105f4ecef8ad9ca31a8372d0c353", "psk": "O3bwKSjnaoCxDoUxjcq4Rk8ZKkezQUiy", "psk_metadata": { "last_generated_on": "2017-06-14T05:20:00Z" } }, "success": true } ```