# Create Jira ITSM Request

In this article, I would be showing you how to create a Service Management customer request with custom-fields.

## Step 1: Set up the project

1. Create a new directory for your project.
2. Open a terminal and navigate to the project directory.
3. Initialize a new Go module using the following command:

```bash
go mod init <module-name>
```

## Step 2: Install the "go-atlassian" library

In the terminal, run the following command to install the "go-atlassian" library:

```bash
go get -v github.com/ctreminiom/go-atlassian
```

## Step 3: Import the necessary packages

1. Create a new Go file (e.g., `main.go`) in your project directory.
2. Open the file and import the required packages:

{% code fullWidth="true" %}

```go
package main

import (
	"fmt"
	"github.com/ctreminiom/go-atlassian/jira/sm"
	"github.com/ctreminiom/go-atlassian/pkg/infra/models"
)
```

{% endcode %}

## Step 4: Authenticate with Jira

In the `main` function, create a new Jira client and authenticate using your Jira URL, username, and API token:

{% code fullWidth="true" %}

```go
func main() {

	jiraHost := "https://<_jira_instance_>.atlassian.net"
	mailAddress := "<your_mail>"
	apiToken := "<your_api_token>"

	client, err := sm.New(nil, jiraHost)
	if err != nil {
		log.Fatal(err)
	}

	client.Auth.SetBasicAuth(mailAddress, apiToken)
}
```

{% endcode %}

## Step 5: Create an ITSM customer request with custom fields

Define the fields you want to set:

{% code fullWidth="true" %}

```go
payload := &models.CreateCustomerRequestPayloadScheme{
	Channel:             "",
	Form:                nil,
	IsAdfRequest:        false,
	RaiseOnBehalfOf:     "",
	RequestFieldValues:  nil,
	RequestParticipants: nil,
	RequestTypeID:       "10",
	ServiceDeskID:       "1",
}

if err := payload.AddCustomField("summary", "Summary Sample"); err != nil {
	log.Fatal(err)
}

if err := payload.DateCustomField("duedate", time.Now()); err != nil {
	log.Fatal(err)
}

if err := payload.Components([]string{"Intranet"}); err != nil {
	log.Fatal(err)
}

if err := payload.AddCustomField("labels", []string{"label-00", "label-01"}); err != nil {
	log.Fatal(err)
}
```

{% endcode %}

{% hint style="info" %}
A list of the fields required by a customer request type can be obtained using the `sm.RequestType.Fields` method.
{% endhint %}

* Create a new issue using the `Create` method and set the custom fields:

{% code fullWidth="true" %}

```go

ticket, response, err := atlassian.Request.Create(context.Background(), payload, form)
if err != nil {
	log.Fatal(err)
}
```

{% endcode %}

## Step 6: Run the program

1. Save the `main.go` file.
2. In the terminal, navigate to your project directory.
3. Execute the following command to run the program:

```bash
go run main.go
```

This will create a new ITSM customer request in Jira with the specified custom field values.

<figure><img src="https://4039951191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MRIBKheqm91_IPQsFV_%2Fuploads%2FNr0vozHNjWQixXRbsfb0%2Fimage.png?alt=media&#x26;token=3bc63af5-4954-486b-97f8-08ce776f231b" alt=""><figcaption></figcaption></figure>
