code: func (c *Manager) CreateTag(ctx context.Context, tag *Tag) (string, error) {
  	// create avoids the annoyance of CreateTag requiring a "description" key to be included in the request,
  	// even though the field value can be empty.
  	type create struct {
  		Name        string `json:"name"`
  		Description string `json:"description"`
  		CategoryID  string `json:"category_id"`
  	}
  	spec := struct {
  		Tag create `json:"create_spec"`
  	}{
  		Tag: create{
  			Name:        tag.Name,
  			Description: tag.Description,
  			CategoryID:  tag.CategoryID,
  		},
  	}
  	if isName(tag.CategoryID) {
  		cat, err := c.GetCategory(ctx, tag.CategoryID)
  		if err != nil {
  			return "", err
  		}
  		spec.Tag.CategoryID = cat.ID
  	}
  	url := internal.URL(c, internal.TagPath)
  	var res string
  	return res, c.Do(ctx, url.Request(http.MethodPost, spec), &res)
  }
docs: // CreateTag creates a new tag with the given Name, Description and CategoryID.