diff --git a/config/cache.go b/config/cache.go
new file mode 100644
index 0000000..2e6ffaa
--- /dev/null
+++ b/config/cache.go
@@ -0,0 +1,100 @@
+package config
+
+import (
+	"fmt"
+	"time"
+)
+
+// CacheConfig configures the cache behavior
+type CacheConfig struct {
+	// Enabled controls whether caching is active
+	Enabled bool `yaml:"enabled" default:"true" help:"Enable response caching"`
+
+	// DefaultTTL is the default time-to-live for cache entries
+	DefaultTTL string `yaml:"default_ttl" default:"5m" help:"Default cache TTL (e.g., '5m', '1h')"`
+
+	// SearchTTL is the TTL for search results
+	SearchTTL string `yaml:"search_ttl" default:"2m" help:"Cache TTL for search results (e.g., '2m', '30s')"`
+
+	// MetadataTTL is the TTL for metadata and corpus information
+	MetadataTTL string `yaml:"metadata_ttl" default:"15m" help:"Cache TTL for metadata and corpus info (e.g., '15m', '1h')"`
+
+	// MaxSize is the maximum number of cache entries
+	MaxSize int `yaml:"max_size" default:"1000" help:"Maximum number of cache entries"`
+}
+
+// DefaultCacheConfig returns a default cache configuration
+func DefaultCacheConfig() *CacheConfig {
+	return &CacheConfig{
+		Enabled:     true,
+		DefaultTTL:  "5m",  // 5 minutes
+		SearchTTL:   "2m",  // 2 minutes - search results change less frequently
+		MetadataTTL: "15m", // 15 minutes - metadata is more stable
+		MaxSize:     1000,
+	}
+}
+
+// Validate validates cache configuration
+func (c *CacheConfig) Validate() error {
+	if !c.Enabled {
+		return nil // Skip validation if cache is disabled
+	}
+
+	if c.MaxSize <= 0 {
+		return fmt.Errorf("cache max_size must be positive, got %d", c.MaxSize)
+	}
+
+	// Validate TTL duration strings
+	if _, err := time.ParseDuration(c.DefaultTTL); err != nil {
+		return fmt.Errorf("invalid default_ttl '%s': %w", c.DefaultTTL, err)
+	}
+
+	if _, err := time.ParseDuration(c.SearchTTL); err != nil {
+		return fmt.Errorf("invalid search_ttl '%s': %w", c.SearchTTL, err)
+	}
+
+	if _, err := time.ParseDuration(c.MetadataTTL); err != nil {
+		return fmt.Errorf("invalid metadata_ttl '%s': %w", c.MetadataTTL, err)
+	}
+
+	return nil
+}
+
+// GetDefaultTTL returns the default TTL as a time.Duration
+func (c *CacheConfig) GetDefaultTTL() time.Duration {
+	if !c.Enabled {
+		return 0
+	}
+
+	duration, err := time.ParseDuration(c.DefaultTTL)
+	if err != nil {
+		return 5 * time.Minute // fallback to default
+	}
+	return duration
+}
+
+// GetSearchTTL returns the search TTL as a time.Duration
+func (c *CacheConfig) GetSearchTTL() time.Duration {
+	if !c.Enabled {
+		return 0
+	}
+
+	duration, err := time.ParseDuration(c.SearchTTL)
+	if err != nil {
+		return 2 * time.Minute // fallback to default
+	}
+	return duration
+}
+
+// GetMetadataTTL returns the metadata TTL as a time.Duration
+func (c *CacheConfig) GetMetadataTTL() time.Duration {
+	if !c.Enabled {
+		return 0
+	}
+
+	duration, err := time.ParseDuration(c.MetadataTTL)
+	if err != nil {
+		return 15 * time.Minute // fallback to default
+	}
+	return duration
+}
diff --git a/config/cache_test.go b/config/cache_test.go
new file mode 100644
index 0000000..661a9e7
--- /dev/null
+++ b/config/cache_test.go
@@ -0,0 +1,182 @@
+package config
+
+import (
+	"testing"
+	"time"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestDefaultCacheConfig(t *testing.T) {
+	config := DefaultCacheConfig()
+
+	assert.True(t, config.Enabled)
+	assert.Equal(t, "5m", config.DefaultTTL)
+	assert.Equal(t, "2m", config.SearchTTL)
+	assert.Equal(t, "15m", config.MetadataTTL)
+	assert.Equal(t, 1000, config.MaxSize)
+}
+
+func TestCacheConfigValidate(t *testing.T) {
+	tests := []struct {
+		name      string
+		config    CacheConfig
+		wantError bool
+		errorMsg  string
+	}{
+		{
+			name:      "disabled cache",
+			config:    CacheConfig{Enabled: false},
+			wantError: false,
+		},
+		{
+			name: "valid cache config",
+			config: CacheConfig{
+				Enabled:     true,
+				DefaultTTL:  "5m",
+				SearchTTL:   "2m",
+				MetadataTTL: "15m",
+				MaxSize:     1000,
+			},
+			wantError: false,
+		},
+		{
+			name: "invalid max size",
+			config: CacheConfig{
+				Enabled:     true,
+				DefaultTTL:  "5m",
+				SearchTTL:   "2m",
+				MetadataTTL: "15m",
+				MaxSize:     0,
+			},
+			wantError: true,
+			errorMsg:  "cache max_size must be positive",
+		},
+		{
+			name: "invalid default TTL",
+			config: CacheConfig{
+				Enabled:     true,
+				DefaultTTL:  "invalid",
+				SearchTTL:   "2m",
+				MetadataTTL: "15m",
+				MaxSize:     1000,
+			},
+			wantError: true,
+			errorMsg:  "invalid default_ttl",
+		},
+		{
+			name: "invalid search TTL",
+			config: CacheConfig{
+				Enabled:     true,
+				DefaultTTL:  "5m",
+				SearchTTL:   "bad-duration",
+				MetadataTTL: "15m",
+				MaxSize:     1000,
+			},
+			wantError: true,
+			errorMsg:  "invalid search_ttl",
+		},
+		{
+			name: "invalid metadata TTL",
+			config: CacheConfig{
+				Enabled:     true,
+				DefaultTTL:  "5m",
+				SearchTTL:   "2m",
+				MetadataTTL: "not-a-duration",
+				MaxSize:     1000,
+			},
+			wantError: true,
+			errorMsg:  "invalid metadata_ttl",
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			err := tt.config.Validate()
+
+			if tt.wantError {
+				assert.Error(t, err)
+				assert.Contains(t, err.Error(), tt.errorMsg)
+			} else {
+				assert.NoError(t, err)
+			}
+		})
+	}
+}
+
+func TestCacheConfigGetTTLMethods(t *testing.T) {
+	config := &CacheConfig{
+		Enabled:     true,
+		DefaultTTL:  "5m",
+		SearchTTL:   "2m",
+		MetadataTTL: "15m",
+		MaxSize:     1000,
+	}
+
+	// Test valid TTL parsing
+	assert.Equal(t, 5*time.Minute, config.GetDefaultTTL())
+	assert.Equal(t, 2*time.Minute, config.GetSearchTTL())
+	assert.Equal(t, 15*time.Minute, config.GetMetadataTTL())
+
+	// Test disabled cache returns 0
+	disabledConfig := &CacheConfig{Enabled: false}
+	assert.Equal(t, time.Duration(0), disabledConfig.GetDefaultTTL())
+	assert.Equal(t, time.Duration(0), disabledConfig.GetSearchTTL())
+	assert.Equal(t, time.Duration(0), disabledConfig.GetMetadataTTL())
+
+	// Test invalid TTL falls back to defaults
+	invalidConfig := &CacheConfig{
+		Enabled:     true,
+		DefaultTTL:  "invalid",
+		SearchTTL:   "bad",
+		MetadataTTL: "worse",
+	}
+	assert.Equal(t, 5*time.Minute, invalidConfig.GetDefaultTTL())
+	assert.Equal(t, 2*time.Minute, invalidConfig.GetSearchTTL())
+	assert.Equal(t, 15*time.Minute, invalidConfig.GetMetadataTTL())
+}
+
+func TestCacheConfigVariousTTLFormats(t *testing.T) {
+	tests := []struct {
+		name     string
+		ttl      string
+		expected time.Duration
+	}{
+		{
+			name:     "seconds",
+			ttl:      "30s",
+			expected: 30 * time.Second,
+		},
+		{
+			name:     "minutes",
+			ttl:      "5m",
+			expected: 5 * time.Minute,
+		},
+		{
+			name:     "hours",
+			ttl:      "1h",
+			expected: 1 * time.Hour,
+		},
+		{
+			name:     "mixed format",
+			ttl:      "1h30m",
+			expected: 1*time.Hour + 30*time.Minute,
+		},
+		{
+			name:     "microseconds",
+			ttl:      "500ms",
+			expected: 500 * time.Millisecond,
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			config := &CacheConfig{
+				Enabled:    true,
+				DefaultTTL: tt.ttl,
+			}
+
+			assert.Equal(t, tt.expected, config.GetDefaultTTL())
+		})
+	}
+}
diff --git a/config/config.go b/config/config.go
index 361ae2b..be1fefe 100644
--- a/config/config.go
+++ b/config/config.go
@@ -16,6 +16,9 @@
 	// KorAP API configuration
 	KorAP KorAPConfig `yaml:"korap"`
 
+	// Cache configuration
+	Cache CacheConfig `yaml:"cache"`
+
 	// Logging configuration
 	Logging LoggingConfig `yaml:"logging"`
 }
@@ -72,6 +75,7 @@
 			Timeout:    30,
 			MaxRetries: 3,
 		},
+		Cache: *DefaultCacheConfig(),
 		Logging: LoggingConfig{
 			Level:  "info",
 			Format: "text",
@@ -89,6 +93,10 @@
 		return fmt.Errorf("korap config validation failed: %w", err)
 	}
 
+	if err := c.Cache.Validate(); err != nil {
+		return fmt.Errorf("cache config validation failed: %w", err)
+	}
+
 	if err := c.Logging.Validate(); err != nil {
 		return fmt.Errorf("logging config validation failed: %w", err)
 	}
