{"record":{"id":"2ff91fe89cfcfd21","repo":"hasura/graphql-engine","slug":"exporting-metadata-from-server-w","errorCode":null,"errorMessage":"exporting metadata from server: %w","messagePattern":"exporting metadata from server: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/commands/metadata_handlers.go","lineNumber":320,"sourceCode":"}\n\nfunc (m *metadataModeYAMLHandler) Diff(o *MetadataDiffOptions) error {\n\tvar op errors.Op = \"commands.metadataModeYAMLHandler.Diff\"\n\n\terr := diff(o, DifftypeYAML)\n\tif err != nil {\n\t\treturn errors.E(op, err)\n\t}\n\n\treturn nil\n}\n\nfunc export(o *MetadataExportOptions, mode cli.MetadataMode) error {\n\tvar op errors.Op = \"commands.export\"\n\n\tmetadata, err := ec.APIClient.V1Metadata.ExportMetadata()\n\tif err != nil {\n\t\treturn errors.E(op, fmt.Errorf(\"exporting metadata from server: %w\", err))\n\t}\n\n\tvar metadataBytes []byte\n\n\tmetadataBytes, err = io.ReadAll(metadata)\n\tif err != nil {\n\t\treturn errors.E(op, fmt.Errorf(\"reading metadata from response: %w\", err))\n\t}\n\n\tif mode == cli.MetadataModeYAML {\n\t\tmetadataBytes, err = metadatautil.JSONToYAML(metadataBytes)\n\t\tif err != nil {\n\t\t\treturn errors.E(op, fmt.Errorf(\"parsing metadata to yaml: %w\", err))\n\t\t}\n\t}\n\n\terr = os.WriteFile(o.EC.MetadataFile, metadataBytes, os.ModePerm)\n\tif err != nil {","sourceCodeStart":302,"sourceCodeEnd":338,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/cli/commands/metadata_handlers.go#L302-L338","documentation":"Raised by the `metadata export` command when the call to the server's ExportMetadata API (v1Metadata.ExportMetadata) fails. This is the first step of export: fetching the current metadata document from the server. Any transport error, auth error, or server-side error during that HTTP request is wrapped and reported with this message.","triggerScenarios":"Running `metadata export` when the HTTP request to /v1metadata or /v1/metadata (export_metadata) fails: network unreachable, 401/403 from a bad admin secret, 500 from the server, TLS failures, or wrong endpoint configuration.","commonSituations":"Incorrect --endpoint or --admin-secret flags; expired or missing admin secret in config or env vars; server behind a proxy that blocks the request; CLI pointing at the wrong environment (e.g. dev endpoint that is down); server version not supporting the metadata API.","solutions":["Verify the endpoint URL and admin secret are correct for the target server (check config file and env overrides)","Test basic connectivity: curl the server's healthz/v1 metadata endpoint with the same credentials","Check server logs for the corresponding request failure (5xx, auth rejection)","Ensure the CLI version matches a server version that supports the v1 metadata export API"],"exampleFix":"# before\nhasura metadata export --endpoint https://wrong-host/v1  # exporting metadata from server: ...\n# after\nhasura metadata export --endpoint https://correct-host --admin-secret $ADMIN_SECRET","handlingStrategy":"retry","validationCode":"// pre-flight check before export\nreq, _ := http.NewRequest(\"GET\", endpoint+\"/healthz\", nil)\nresp, err := http.DefaultClient.Do(req)\nif err != nil || resp.StatusCode >= 500 {\n  return errors.New(\"server unreachable, aborting export\")\n}","typeGuard":null,"tryCatchPattern":"if err := export(opts, mode); err != nil {\n  if isRetryable(err) { // network/5xx\n    time.Sleep(backoff)\n    return export(opts, mode)\n  }\n  return err\n}","preventionTips":["Store endpoint and admin secret in config or env vars rather than typing them per command","Pre-flight health-check the server before scripting exports","Wrap exports in scripts with retry logic for transient failures"],"tags":["metadata","export","network","authentication","cli","go"],"backgroundTag":"api-request-failed","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}