diff --git a/apps/shared/src/events/events.ts b/apps/shared/src/events/events.ts
index ee5eddae7c27e7832fa2559a4ee58d38833e4603..3702b4b5ae86521d04b031346eefbb8bfa2e165b 100644
--- a/apps/shared/src/events/events.ts
+++ b/apps/shared/src/events/events.ts
@@ -25,3 +25,7 @@ export class EventInfoPublicDid extends BaseEvent<{
 export class EventDidcommConnectionsGetAll extends BaseEvent<{
   connections: Array<ConnectionRecord>;
 }> {}
+
+export class EventDidcommConnectionsGetById extends BaseEvent<{
+  connection: ConnectionRecord | null;
+}> {}
diff --git a/apps/ssi-abstraction/src/agent/__tests__/agent.controller.spec.ts b/apps/ssi-abstraction/src/agent/__tests__/agent.controller.spec.ts
index 6487fe71335d5f22310d79eea81eca3270d13c95..be3157d5f61eb7948a84f0dc32e38b7296052008 100644
--- a/apps/ssi-abstraction/src/agent/__tests__/agent.controller.spec.ts
+++ b/apps/ssi-abstraction/src/agent/__tests__/agent.controller.spec.ts
@@ -11,7 +11,7 @@ describe('AgentController', () => {
 
   beforeEach(async () => {
     const moduleRef = await Test.createTestingModule({
-      imports: [mockConfigModule(3002)],
+      imports: [mockConfigModule()],
       controllers: [AgentController],
       providers: [AgentService],
     }).compile();
diff --git a/apps/ssi-abstraction/src/agent/connections/__tests__/connections.controller.spec.ts b/apps/ssi-abstraction/src/agent/connections/__tests__/connections.controller.spec.ts
index 690d3f7b7faa38c78f44e23b7b005a11231e33ce..da7bf4384212a590059f4c62e33b345ecb4a2b61 100644
--- a/apps/ssi-abstraction/src/agent/connections/__tests__/connections.controller.spec.ts
+++ b/apps/ssi-abstraction/src/agent/connections/__tests__/connections.controller.spec.ts
@@ -13,7 +13,7 @@ describe('ConnectionsController', () => {
 
   beforeEach(async () => {
     const moduleRef = await Test.createTestingModule({
-      imports: [mockConfigModule(3003), AgentModule],
+      imports: [mockConfigModule(), AgentModule],
       controllers: [ConnectionsController],
       providers: [ConnectionsService],
     }).compile();
@@ -34,4 +34,19 @@ describe('ConnectionsController', () => {
       expect(connectionsEvent.data).toStrictEqual({ connections: result });
     });
   });
+
+  describe('get by id', () => {
+    it('should get a connection record by id', async () => {
+      const result: ConnectionRecord | null = null;
+      jest
+        .spyOn(connectionsService, 'getById')
+        .mockImplementation(() => Promise.resolve(result));
+
+      const connectionsEvent = await connectionsController.getById({
+        id: 'id',
+      });
+
+      expect(connectionsEvent.data).toStrictEqual({ connection: result });
+    });
+  });
 });
diff --git a/apps/ssi-abstraction/src/agent/connections/connections.controller.ts b/apps/ssi-abstraction/src/agent/connections/connections.controller.ts
index f9637e38d1b750477dd8ff5f984904bb490323c8..fa034d562aaca7e42f7ffe456d1676a7c14ef526 100644
--- a/apps/ssi-abstraction/src/agent/connections/connections.controller.ts
+++ b/apps/ssi-abstraction/src/agent/connections/connections.controller.ts
@@ -1,6 +1,9 @@
 import { Controller } from '@nestjs/common';
 import { MessagePattern } from '@nestjs/microservices';
-import { EventDidcommConnectionsGetAll } from '@ocm/shared';
+import {
+  EventDidcommConnectionsGetById,
+  EventDidcommConnectionsGetAll,
+} from '@ocm/shared';
 
 import { ConnectionsService } from './connections.service.js';
 
@@ -14,4 +17,15 @@ export class ConnectionsController {
       connections: await this.connectionsService.getAll(),
     });
   }
+
+  @MessagePattern('didcomm.connections.getById')
+  public async getById({
+    id,
+  }: {
+    id: string;
+  }): Promise<EventDidcommConnectionsGetById> {
+    return new EventDidcommConnectionsGetById({
+      connection: await this.connectionsService.getById(id),
+    });
+  }
 }
diff --git a/apps/ssi-abstraction/src/agent/connections/connections.service.ts b/apps/ssi-abstraction/src/agent/connections/connections.service.ts
index 5b8c7e8cae7f321b456055b21fd3ac0ced877bc8..fe3123f4d11dad728a9ac06137282134d5f461c4 100644
--- a/apps/ssi-abstraction/src/agent/connections/connections.service.ts
+++ b/apps/ssi-abstraction/src/agent/connections/connections.service.ts
@@ -16,4 +16,8 @@ export class ConnectionsService {
   public async getAll(): Promise<Array<ConnectionRecord>> {
     return await this.agent.connections.getAll();
   }
+
+  public async getById(id: string): Promise<ConnectionRecord | null> {
+    return await this.agent.connections.findById(id);
+  }
 }
diff --git a/apps/ssi-abstraction/test/connections.e2e-spec.ts b/apps/ssi-abstraction/test/connections.e2e-spec.ts
index a2b5a523c34e467efd953404e57ac64eaa940228..7c53e1a3ca7b8d3691bfe3a32f1857192c16372f 100644
--- a/apps/ssi-abstraction/test/connections.e2e-spec.ts
+++ b/apps/ssi-abstraction/test/connections.e2e-spec.ts
@@ -1,6 +1,9 @@
 import type { INestApplication } from '@nestjs/common';
 import type { ClientProxy } from '@nestjs/microservices';
-import type { EventDidcommConnectionsGetAll } from '@ocm/shared';
+import type {
+  EventDidcommConnectionsGetById,
+  EventDidcommConnectionsGetAll,
+} from '@ocm/shared';
 
 import { ClientsModule, Transport } from '@nestjs/microservices';
 import { Test } from '@nestjs/testing';
@@ -45,6 +48,15 @@ describe('Connections', () => {
     expect(response.data).toMatchObject({ connections: [] });
   });
 
+  it('didcomm.connections.getById', async () => {
+    const response$: Observable<EventDidcommConnectionsGetById> = client.send(
+      'didcomm.connections.getById',
+      { id: 'some-id' },
+    );
+    const response = await firstValueFrom(response$);
+    expect(response.data).toMatchObject({ connection: null });
+  });
+
   afterAll(async () => {
     await app.close();
     client.close();