diff --git a/routers/api/v1/activitypub/repository.go b/routers/api/v1/activitypub/repository.go
index 670b8b150e..2568156a84 100644
--- a/routers/api/v1/activitypub/repository.go
+++ b/routers/api/v1/activitypub/repository.go
@@ -6,6 +6,7 @@ package activitypub
 import (
 	"fmt"
 	"net/http"
+	"net/url"
 	"strings"
 
 	"code.gitea.io/gitea/modules/context"
@@ -18,6 +19,13 @@ import (
 	//f3 "lab.forgefriends.org/friendlyforgeformat/gof3"
 )
 
+type (
+	Schema string
+	UserID string
+	Host   string
+	Port   string
+)
+
 // Repository function returns the Repository actor for a repo
 func Repository(ctx *context.APIContext) {
 	// swagger:operation GET /activitypub/repository-id/{repository-id} activitypub activitypubRepository
@@ -75,8 +83,16 @@ func RepositoryInbox(ctx *context.APIContext) {
 	log.Info("RepositoryInbox: Activity.Source %v", opt.Source)
 	log.Info("RepositoryInbox: Activity.Actor %v", opt.Actor)
 
-	// assume actor is: "actor": "https://codeberg.org/api/activitypub/user-id/12345"
+	// assume actor is: "actor": "https://codeberg.org/api/v1/activitypub/user-id/12345"
 	// parse actor
+	actor, err := parseActor(opt.Actor.GetID().String())
+
+	if err != nil {
+		panic(err)
+	}
+
+	log.Info("RepositoryInbox: Actor parsed. %v", actor)
+
 	// if not actor.isValid() then exit_with_error
 	// get_person_by_rest
 	// create_user_from_person (if not alreaydy present)
@@ -86,3 +102,37 @@ func RepositoryInbox(ctx *context.APIContext) {
 	ctx.Status(http.StatusNoContent)
 
 }
+
+type ActorData struct {
+	schema string
+	userId string
+	host   string
+	port   string
+}
+
+func parseActor(actor string) (ActorData, error) {
+	u, err := url.Parse(actor)
+
+	// check if userID IRI is well formed url
+	if err != nil {
+		return ActorData{}, fmt.Errorf("the actor ID was not valid: %v", err)
+	}
+
+	if u.Scheme == "" || u.Host == "" {
+		return ActorData{}, fmt.Errorf("the actor ID was not valid: Invalid Schema or Host")
+	}
+
+	if !strings.Contains(u.Path, "api/v1/activitypub/user-id") {
+		return ActorData{}, fmt.Errorf("the Path to the API was invalid: %v\n the full URL is: %v\n", u.Path, actor)
+	}
+
+	pathWithUserID := strings.Split(u.Path, "/")
+	userId := pathWithUserID[len(pathWithUserID)-1]
+
+	return ActorData{
+		schema: u.Scheme,
+		userId: userId,
+		host:   u.Host,
+		port:   u.Port(),
+	}, nil
+}