code: func (r *ReceiptDetails) UnmarshalJSON(data []byte) error {
  	dataBytes := bytes.NewReader(data)
  	var aux struct {
  		ID              string     `json:"request"`
  		Status          int        `json:"status"`
  		Acknowledged    intBool    `json:"acknowledged"`
  		AcknowledgedBy  string     `json:"acknowledged_by"`
  		Expired         intBool    `json:"expired"`
  		CalledBack      intBool    `json:"called_back"`
  		AcknowledgedAt  *timestamp `json:"acknowledged_at"`
  		LastDeliveredAt *timestamp `json:"last_delivered_at"`
  		ExpiresAt       *timestamp `json:"expires_at"`
  		CalledBackAt    *timestamp `json:"called_back_at"`
  	}
  
  	// Decode json into the aux struct
  	if err := json.NewDecoder(dataBytes).Decode(&aux); err != nil {
  		return err
  	}
  
  	// Set the RecipientDetails with the right types
  	r.Status = aux.Status
  	r.Acknowledged = bool(aux.Acknowledged)
  	r.AcknowledgedBy = aux.AcknowledgedBy
  	r.Expired = bool(aux.Expired)
  	r.CalledBack = bool(aux.CalledBack)
  	r.ID = aux.ID
  	r.AcknowledgedAt = aux.AcknowledgedAt.Time
  	r.LastDeliveredAt = aux.LastDeliveredAt.Time
  	r.ExpiresAt = aux.ExpiresAt.Time
  	r.CalledBackAt = aux.CalledBackAt.Time
  
  	return nil
  }
docs: // UnmarshalJSON is a custom unmarshal function to handle timestamps and
  // boolean as int and convert them to the right type.