// Go 1.20+; standard library only. package main import ( "fmt" "io" "net/http" "os" "strings" "time" ) func main() { body := `{"title":"Fleet roadside incident","priority":"high","requested_by":"11111111-1111-4111-a111-111111111111","latitude":-1.292100000000000026290081223123706877231597900390625,"longitude":36.821899999999999408828443847596645355224609375,"services":["recovery"],"external_reference":"FLEET-INC-001"}` url := strings.TrimRight(os.Getenv("PETROSUPPORT_BASE_URL"), "/") + "/incidents" req, err := http.NewRequest("POST", url, strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("Authorization", "Bearer " + os.Getenv("PETROSUPPORT_TOKEN")) req.Header.Set("Content-Type", "application/json") req.Header.Set("Idempotency-Key", os.Getenv("PETROSUPPORT_IDEMPOTENCY_KEY")) client := &http.Client{Timeout: 20 * time.Second, CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }} res, err := client.Do(req) if err != nil { panic("Transport failed; reconcile before retrying") } defer res.Body.Close() data, err := io.ReadAll(res.Body) if err != nil { panic(err) } if res.StatusCode >= 300 { panic(fmt.Sprintf("HTTP %d: %s", res.StatusCode, data)) } fmt.Println(string(data)) }