## Set Pre-Shared Keys (PSK) for IPsec tunnels `client.MagicTransit.IPSECTunnels.PSKSet(ctx, params) (*IPSECTunnelPSKSetResponse, error)` **post** `/accounts/{account_id}/magic/ipsec_tunnels/psk` Sets Pre-Shared Keys for multiple IPsec tunnels associated with an account. Use `?validate_only=true` as an optional query parameter to only run validation without persisting changes. After PSKs are applied, they are immediately persisted to Cloudflare's edge and cannot be retrieved later. Store the PSKs in a safe place. ### Parameters - `params IPSECTunnelPSKSetParams` - `AccountID param.Field[string]` Path param: Identifier - `PSKs param.Field[[]IPSECTunnelPSKSetParamsPSK]` Body param: List of tunnel ID and PSK pairs. - `ID string` The ID of the IPsec tunnel. - `PSK string` A randomly generated or provided string for use in the IPsec tunnel. - `ValidateOnly param.Field[bool]` Query param: If `true`, only run validation without persisting changes. ### Returns - `type IPSECTunnelPSKSetResponse struct{…}` - `SuccessfullyAppliedPSKs map[string, IPSECTunnelPSKSetResponseSuccessfullyAppliedPSK]` Map of tunnel IDs to successfully applied PSK details. - `IPSECID string` The IKE identifier used for this tunnel on the Cloudflare edge. - `IPSECTunnelID string` Identifier - `PSK string` A randomly generated or provided string for use in the IPsec tunnel. - `PSKMetadata PSKMetadata` The PSK metadata that includes when the PSK was generated. - `LastGeneratedOn Time` The date and time the tunnel was last modified. - `UnappliedPSKs map[string, string]` Map of tunnel IDs to failure reasons for PSKs that could not be applied. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/magic_transit" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) response, err := client.MagicTransit.IPSECTunnels.PSKSet(context.TODO(), magic_transit.IPSECTunnelPSKSetParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), PSKs: cloudflare.F([]magic_transit.IPSECTunnelPSKSetParamsPSK{magic_transit.IPSECTunnelPSKSetParamsPSK{ ID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), PSK: cloudflare.F("O3bwKSjnaoCxDoUxjcq4Rk8ZKkezQUiy"), }}), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.SuccessfullyAppliedPSKs) } ``` #### 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": { "successfully_applied_psks": { "foo": { "ipsec_id": "12345_abc123def4567890abcdef1234567890", "ipsec_tunnel_id": "023e105f4ecef8ad9ca31a8372d0c353", "psk": "O3bwKSjnaoCxDoUxjcq4Rk8ZKkezQUiy", "psk_metadata": { "last_generated_on": "2017-06-14T05:20:00Z" } } }, "unapplied_psks": { "foo": "string" } }, "success": true } ```