diff --git a/src/models/PendaftaranTA.go b/src/models/PendaftaranTA.go
index 044aea676aaead1b301cad5b25d9c1ffc985503a..269de8b25b42e5423852cf6bd3d718f4d3776015 100644
--- a/src/models/PendaftaranTA.go
+++ b/src/models/PendaftaranTA.go
@@ -2,13 +2,13 @@ package models
 
 import "time"
 
-type pendaftaran_ta_status_enum string
+type Pendaftaran_ta_status_enum string
 
 const (
-	NOT_ASSIGNED pendaftaran_ta_status_enum = "NOT_ASSIGNED"
-	INTERVIEW    pendaftaran_ta_status_enum = "INTERVIEW"
-	APPROVED     pendaftaran_ta_status_enum = "APPROVED"
-	REJECTED     pendaftaran_ta_status_enum = "REJECTED"
+	NOT_ASSIGNED Pendaftaran_ta_status_enum = "NOT_ASSIGNED"
+	INTERVIEW    Pendaftaran_ta_status_enum = "INTERVIEW"
+	APPROVED     Pendaftaran_ta_status_enum = "APPROVED"
+	REJECTED     Pendaftaran_ta_status_enum = "REJECTED"
 )
 
 type PendaftaranTA struct {
@@ -16,7 +16,7 @@ type PendaftaranTA struct {
 	IdTopik         string                     `gorm:"type:uuid"`
 	IdMahasiswa     string                     `gorm:"type:uuid"`
 	IdDosen         string                     `gorm:"type:uuid"`
-	Status          pendaftaran_ta_status_enum `gorm:"type:pendaftaran_ta_status_enum;default:NOT_ASSIGNED"`
+	Status          Pendaftaran_ta_status_enum `gorm:"type:pendaftaran_ta_status_enum;default:NOT_ASSIGNED"`
 	JalurPilihan    string                     `gorm:"default:null"`
 	InterviewAt     time.Time                  `gorm:"default:null"`
 	DecidedAt       time.Time                  `gorm:"default:null"`
diff --git a/src/module/pendaftaran/entity/pendaftaran.go b/src/module/pendaftaran/entity/pendaftaran.go
index 513b172428d0fde790a4289909bb2c6b6c57eb77..09e4904282236046a694b2e54ac1b0b2c65146df 100644
--- a/src/module/pendaftaran/entity/pendaftaran.go
+++ b/src/module/pendaftaran/entity/pendaftaran.go
@@ -15,6 +15,19 @@ type Pendaftaran struct {
 	IdPeriode   string
 }
 
+type PendaftaranGetResponse struct {
+	Id              string
+	Status          string
+	InterviewAt     time.Time
+	DecidedAt       time.Time
+	WaktuPengiriman time.Time
+	Judul           string
+	Deskripsi       string
+	IdDosen         string
+	NamaDosen       string
+	EmailDosen      string
+}
+
 type ParamValues struct {
 	Limit  int
 	Offset int
@@ -29,7 +42,7 @@ type PendaftaranAddRequest struct {
 
 type UpdatePendaftaranRequest struct {
 	Id     string
-	Status bool
+	Status string
 }
 
 type WaktuInterviewUpdateRequest struct {
diff --git a/src/module/pendaftaran/internal/repository/pendaftaran.go b/src/module/pendaftaran/internal/repository/pendaftaran.go
index 9934ad6abbfcf1c9575fb9c539fa4725dbfb6559..d9ea29b8b7fa766652e619d1f47a08c46ec4a593 100644
--- a/src/module/pendaftaran/internal/repository/pendaftaran.go
+++ b/src/module/pendaftaran/internal/repository/pendaftaran.go
@@ -4,6 +4,7 @@ import (
 	"time"
 
 	"github.com/google/uuid"
+	"gitlab.informatika.org/k-01-11/graduit-be/src/models"
 	"gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/entity"
 	"gorm.io/gorm"
 )
@@ -20,29 +21,28 @@ func NewPendaftaranRepository(dbWrite *gorm.DB, dbRead *gorm.DB) *PendaftaranRep
 	}
 }
 
-func (repo *PendaftaranRepo) NewPendaftaran(pendaftaran entity.Pendaftaran) (output entity.Pendaftaran, err error) {
-	pendaftaran.Id = uuid.New().String()
-	pendaftaran.CreatedAt = time.Now()
-	pendaftaran.UpdatedAt = time.Now()
-
+func (repo *PendaftaranRepo) NewPendaftaran(pendaftaran models.PendaftaranTA) (output models.PendaftaranTA, err error) {
+	pendaftaran.ID = uuid.New().String()
+	pendaftaran.WaktuPengiriman = time.Now()
+	pendaftaran.Status = models.Pendaftaran_ta_status_enum("NOT_ASSIGNED")
 	result := repo.DBWrite.Create(&pendaftaran)
 	if result.Error != nil {
-		return entity.Pendaftaran{}, result.Error
+		return models.PendaftaranTA{}, result.Error
 	}
 	return pendaftaran, nil
 }
 
-func (repo *PendaftaranRepo) GetPendaftaran() (output []entity.Pendaftaran, err error) {
-	var batches []entity.Pendaftaran
-	result := repo.DBRead.Find(&batches)
+func (repo *PendaftaranRepo) GetPendaftaran() (output []models.PendaftaranTA, err error) {
+	var pendaftaran []models.PendaftaranTA
+	result := repo.DBRead.Find(&pendaftaran)
 	if result.Error != nil {
 		return nil, err
 	}
-	return batches, nil
+	return pendaftaran, nil
 }
 
-func (repo *PendaftaranRepo) DeletePendaftaran(id string) (entity.Pendaftaran, error) {
-	batch := entity.Pendaftaran{Id: id}
+func (repo *PendaftaranRepo) DeletePendaftaran(id string) (models.PendaftaranTA, error) {
+	batch := models.PendaftaranTA{ID: id}
 	err := repo.DBWrite.Delete(&batch).Error
 
 	if err != nil {
@@ -52,29 +52,67 @@ func (repo *PendaftaranRepo) DeletePendaftaran(id string) (entity.Pendaftaran, e
 	return batch, err
 }
 
-func (repo *PendaftaranRepo) GetPendaftaranByIdDosen(id string) (output []entity.Pendaftaran, err error) {
-	var pendaftaran []entity.Pendaftaran
-	result := repo.DBRead.Where("id = ?", id).Find(&pendaftaran)
+func (repo *PendaftaranRepo) GetPendaftaranByIdDosen(id string) (output []models.PendaftaranTA, err error) {
+	var pendaftaran []models.PendaftaranTA
+	result := repo.DBRead.Where("id_dosen = ?", id).Find(&pendaftaran)
 	if result.Error != nil {
 		return nil, err
 	}
 	return pendaftaran, nil
 }
 
-func (repo *PendaftaranRepo) SetStatus(id string, val bool) (output []entity.Pendaftaran, err error) {
-	var pendaftaran entity.Pendaftaran
+func (repo *PendaftaranRepo) GetPendaftaranById(id string) (output entity.PendaftaranGetResponse, err error) {
+	var pendaftaran models.PendaftaranTA
+	var dosen models.Pengguna
+	var data entity.PendaftaranGetResponse
+	var status string
+	var topik models.Topik
+
+	res := repo.DBRead.Where("id_mahasiswa = ?", id).Find(&pendaftaran).Limit(1)
+	if res.Error != nil {
+		return data, res.Error
+	}
+
+	res = repo.DBRead.Where("id = ?", pendaftaran.IdDosen).Find(&dosen).Limit(1)
+	if res.Error != nil {
+		return data, res.Error
+	}
+
+	res = repo.DBRead.Where("id = ?", pendaftaran.IdTopik).Find(&topik).Limit(1)
+	if res.Error != nil {
+		return data, res.Error
+	}
+
+	data = entity.PendaftaranGetResponse{
+		Id:              pendaftaran.ID,
+		Status:          status,
+		InterviewAt:     pendaftaran.InterviewAt,
+		DecidedAt:       pendaftaran.DecidedAt,
+		WaktuPengiriman: pendaftaran.WaktuPengiriman,
+		Judul:           topik.Judul,
+		Deskripsi:       topik.Deskripsi,
+		IdDosen:         pendaftaran.IdDosen,
+		NamaDosen:       dosen.Nama,
+		EmailDosen:      dosen.Email,
+	}
+
+	if res.Error != nil {
+		return data, err
+	}
+	return data, nil
+}
+
+func (repo *PendaftaranRepo) SetStatus(id string, val string) (output []models.PendaftaranTA, err error) {
+	var pendaftaran models.PendaftaranTA
 	result := repo.DBRead.Where("id = ?", id).First(&pendaftaran)
 	if result.Error != nil {
 		return nil, result.Error
 	}
 
-	pendaftaran.Status = &val
-	pendaftaran.UpdatedAt = time.Now()
-	if val {
+	pendaftaran.Status = models.Pendaftaran_ta_status_enum(val)
+	if val == "APPROVED" || val == "REJECTED" {
 		now := time.Now()
-		pendaftaran.DecidedAt = &now
-	} else {
-		pendaftaran.DecidedAt = nil
+		pendaftaran.DecidedAt = now
 	}
 
 	result = repo.DBRead.Save(&pendaftaran)
@@ -82,29 +120,29 @@ func (repo *PendaftaranRepo) SetStatus(id string, val bool) (output []entity.Pen
 		return nil, result.Error
 	}
 
-	return []entity.Pendaftaran{pendaftaran}, nil
+	return []models.PendaftaranTA{pendaftaran}, nil
 }
 
-func (repo *PendaftaranRepo) SetTimeInterview(id string, val time.Time) (output []entity.Pendaftaran, err error) {
-	var pendaftaran entity.Pendaftaran
+func (repo *PendaftaranRepo) SetTimeInterview(id string, val time.Time) (output []models.PendaftaranTA, err error) {
+	var pendaftaran models.PendaftaranTA
 	result := repo.DBRead.Where("id = ?", id).First(&pendaftaran)
 	if result.Error != nil {
 		return nil, result.Error
 	}
 
-	pendaftaran.UpdatedAt = time.Now()
-	pendaftaran.InterviewAt = &val
+	pendaftaran.InterviewAt = val
+	pendaftaran.Status = models.Pendaftaran_ta_status_enum("INTERVIEW")
 
 	result = repo.DBRead.Save(&pendaftaran)
 	if result.Error != nil {
 		return nil, result.Error
 	}
 
-	return []entity.Pendaftaran{pendaftaran}, nil
+	return []models.PendaftaranTA{pendaftaran}, nil
 }
 
-func (repo *PendaftaranRepo) GetPendaftaranByPeriode(idPeriode string) (output []entity.Pendaftaran, err error) {
-	var periode []entity.Pendaftaran
+func (repo *PendaftaranRepo) GetPendaftaranByPeriode(idPeriode string) (output []models.PendaftaranTA, err error) {
+	var periode []models.PendaftaranTA
 	result := repo.DBRead.Where("id_periode = ?", idPeriode).Find(&periode)
 	if result.Error != nil {
 		return nil, err
diff --git a/src/module/pendaftaran/internal/usecase/pendaftaran.go b/src/module/pendaftaran/internal/usecase/pendaftaran.go
index b123e7e8b119ac74dff2227b9b70d55e913ca87a..13883e5cae5556ee8a9b6960f58f81232c5b6df4 100644
--- a/src/module/pendaftaran/internal/usecase/pendaftaran.go
+++ b/src/module/pendaftaran/internal/usecase/pendaftaran.go
@@ -3,17 +3,19 @@ package usecase
 import (
 	"time"
 
+	"gitlab.informatika.org/k-01-11/graduit-be/src/models"
 	"gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/entity"
 )
 
 type PendaftaranUsecase interface {
-	AddPendaftaran(pendaftaran entity.Pendaftaran) (entity.Pendaftaran, error)
-	GetPendaftaran() ([]entity.Pendaftaran, error)
-	DeletePendaftaran(id string) (entity.Pendaftaran, error)
-	GetPendaftaranByIdDosen(id string) ([]entity.Pendaftaran, error)
-	UpdateStatusPendaftaran(id string, val bool) ([]entity.Pendaftaran, error)
-	UpdateWaktuInterview(id string, val time.Time) ([]entity.Pendaftaran, error)
-	GetPendaftaranByPeriode(id string) ([]entity.Pendaftaran, error)
+	AddPendaftaran(pendaftaran models.PendaftaranTA) (models.PendaftaranTA, error)
+	GetPendaftaran() (output []models.PendaftaranTA, err error)
+	DeletePendaftaran(id string) (output models.PendaftaranTA, err error)
+	GetPendaftaranByIdDosen(id string) (output []models.PendaftaranTA, err error)
+	UpdateStatusPendaftaran(id string, val string) (output []models.PendaftaranTA, err error)
+	UpdateWaktuInterview(id string, val time.Time) (output []models.PendaftaranTA, err error)
+	GetPendaftaranByPeriode(id string) (output []models.PendaftaranTA, err error)
+	GetPendaftaranById(id string) (output entity.PendaftaranGetResponse, err error)
 }
 
 type PendaftaranUc struct {
@@ -26,7 +28,7 @@ func NewPendaftaranUseCase(pendaftaranRepo PendaftaranRepository) *PendaftaranUc
 	}
 }
 
-func (uc *PendaftaranUc) AddPendaftaran(pendaftaran entity.Pendaftaran) (entity.Pendaftaran, error) {
+func (uc *PendaftaranUc) AddPendaftaran(pendaftaran models.PendaftaranTA) (models.PendaftaranTA, error) {
 	newPendaftaran, err := uc.pendaftaranRepo.NewPendaftaran(pendaftaran)
 
 	if err != nil {
@@ -37,26 +39,30 @@ func (uc *PendaftaranUc) AddPendaftaran(pendaftaran entity.Pendaftaran) (entity.
 
 }
 
-func (uc *PendaftaranUc) GetPendaftaran() ([]entity.Pendaftaran, error) {
+func (uc *PendaftaranUc) GetPendaftaran() (output []models.PendaftaranTA, err error) {
 	return uc.pendaftaranRepo.GetPendaftaran()
 }
 
-func (uc *PendaftaranUc) DeletePendaftaran(id string) (entity.Pendaftaran, error) {
+func (uc *PendaftaranUc) DeletePendaftaran(id string) (output models.PendaftaranTA, err error) {
 	return uc.pendaftaranRepo.DeletePendaftaran(id)
 }
 
-func (uc *PendaftaranUc) GetPendaftaranByIdDosen(id string) ([]entity.Pendaftaran, error) {
+func (uc *PendaftaranUc) GetPendaftaranByIdDosen(id string) (output []models.PendaftaranTA, err error) {
 	return uc.pendaftaranRepo.GetPendaftaranByIdDosen(id)
 }
 
-func (uc *PendaftaranUc) UpdateStatusPendaftaran(id string, val bool) ([]entity.Pendaftaran, error) {
+func (uc *PendaftaranUc) UpdateStatusPendaftaran(id string, val string) (output []models.PendaftaranTA, err error) {
 	return uc.pendaftaranRepo.SetStatus(id, val)
 }
 
-func (uc *PendaftaranUc) UpdateWaktuInterview(id string, val time.Time) ([]entity.Pendaftaran, error) {
+func (uc *PendaftaranUc) UpdateWaktuInterview(id string, val time.Time) (output []models.PendaftaranTA, err error) {
 	return uc.pendaftaranRepo.SetTimeInterview(id, val)
 }
 
-func (uc *PendaftaranUc) GetPendaftaranByPeriode(id string) ([]entity.Pendaftaran, error) {
+func (uc *PendaftaranUc) GetPendaftaranByPeriode(id string) (output []models.PendaftaranTA, err error) {
 	return uc.pendaftaranRepo.GetPendaftaranByPeriode(id)
 }
+
+func (uc *PendaftaranUc) GetPendaftaranById(id string) (output entity.PendaftaranGetResponse, err error) {
+	return uc.pendaftaranRepo.GetPendaftaranById(id)
+}
diff --git a/src/module/pendaftaran/internal/usecase/repository.go b/src/module/pendaftaran/internal/usecase/repository.go
index fcabc161002e919c4e29255090bee78e22e398ed..fcd4a7344face1987f659ff8c2935ad715a950ed 100644
--- a/src/module/pendaftaran/internal/usecase/repository.go
+++ b/src/module/pendaftaran/internal/usecase/repository.go
@@ -3,15 +3,17 @@ package usecase
 import (
 	"time"
 
+	"gitlab.informatika.org/k-01-11/graduit-be/src/models"
 	"gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/entity"
 )
 
 type PendaftaranRepository interface {
-	NewPendaftaran(pendaftaran entity.Pendaftaran) (output entity.Pendaftaran, err error)
-	GetPendaftaran() (output []entity.Pendaftaran, err error)
-	DeletePendaftaran(id string) (entity.Pendaftaran, error)
-	GetPendaftaranByIdDosen(id string) (output []entity.Pendaftaran, err error)
-	SetStatus(id string, val bool) (output []entity.Pendaftaran, err error)
-	SetTimeInterview(id string, val time.Time) (output []entity.Pendaftaran, err error)
-	GetPendaftaranByPeriode(idPeriode string) (output []entity.Pendaftaran, err error)
+	NewPendaftaran(pendaftaran models.PendaftaranTA) (output models.PendaftaranTA, err error)
+	GetPendaftaran() (output []models.PendaftaranTA, err error)
+	DeletePendaftaran(id string) (models.PendaftaranTA, error)
+	GetPendaftaranByIdDosen(id string) (output []models.PendaftaranTA, err error)
+	SetStatus(id string, val string) (output []models.PendaftaranTA, err error)
+	SetTimeInterview(id string, val time.Time) (output []models.PendaftaranTA, err error)
+	GetPendaftaranByPeriode(idPeriode string) (output []models.PendaftaranTA, err error)
+	GetPendaftaranById(id string) (output entity.PendaftaranGetResponse, err error)
 }
diff --git a/src/module/pendaftaran/transport/admin_handler.go b/src/module/pendaftaran/transport/admin_handler.go
index 17d7b183c97f8dfe9ba6402b566a797c6d88ec79..822e0f9bab736193fd13e8611a9c39a668081f34 100644
--- a/src/module/pendaftaran/transport/admin_handler.go
+++ b/src/module/pendaftaran/transport/admin_handler.go
@@ -4,6 +4,7 @@ import (
 	"net/http"
 
 	"github.com/labstack/echo/v4"
+	"gitlab.informatika.org/k-01-11/graduit-be/src/models"
 	"gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/config"
 	"gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/entity"
 	"gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/internal/repository"
@@ -33,6 +34,7 @@ func (t *AdminPendaftaranHandler) MountAdmin(group *echo.Group) {
 	group.POST("/pendaftaran-update-status", t.UpdateStatusPendaftaran)
 	group.POST("/pendaftaran-update-interview", t.UpdateWaktuInterview)
 	group.GET("/pendaftaran-by-periode", t.GetPendaftaranByPeriode)
+	group.GET("/pendaftaran-by-id", t.GetPendaftaranById)
 }
 
 // AddPendaftaran adds a new pendaftaran record.
@@ -50,11 +52,10 @@ func (t *AdminPendaftaranHandler) AddPendaftaran(c echo.Context) error {
 		return c.JSON(http.StatusBadRequest, utils.ResponseDetailOutput(false, http.StatusBadRequest, err.Error(), nil))
 	}
 
-	target := &entity.Pendaftaran{
+	target := &models.PendaftaranTA{
 		IdTopik:     request.IdTopik,
 		IdMahasiswa: request.IdMahasiswa,
 		IdDosen:     request.IdDosen,
-		IdPeriode:   request.IdPeriode,
 	}
 
 	newPendaftaran, err := t.pendaftaranUsecase.AddPendaftaran(*target)
@@ -93,6 +94,16 @@ func (t *AdminPendaftaranHandler) GetPendaftaranByIdDosen(c echo.Context) error
 	return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusOK, "Pendaftaran successfully retreived", listGroupLimit))
 }
 
+func (t *AdminPendaftaranHandler) GetPendaftaranById(c echo.Context) error {
+	id := c.QueryParam("id")
+	listGroupLimit, err := t.pendaftaranUsecase.GetPendaftaranById(id)
+	if err != nil {
+		return c.JSON(http.StatusBadRequest, utils.ResponseDetailOutput(false, http.StatusBadRequest, err.Error(), nil))
+	}
+
+	return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusOK, "Pendaftaran successfully retreived", listGroupLimit))
+}
+
 // DeletePendaftaran deletes a pendaftaran record.
 // @Summary Delete pendaftaran
 // @Description Deletes a pendaftaran record.