# Feature Flags Service

# Feature Flags Service (Port 8014) {#feature-flags-service-port-8014}


The **feature-flags-service** provides centralized feature flag management across all MQUAD services, supporting gradual rollouts, A/B testing, and environment-specific toggles.


## Database {#database}


**Database:** `feature_flags_db`

| Table | Purpose |
|-------|---------|
| `feature_flags` | Flag definitions |
| `flag_rules` | Targeting rules per flag |
| `flag_evaluations` | Evaluation history |


## API Endpoints {#api-endpoints}


| Method | Path | Purpose |
|--------|------|---------|
| GET | `/flags` | List all flags |
| POST | `/flags` | Create a flag |
| PUT | `/flags/{id}` | Update flag |
| DELETE | `/flags/{id}` | Delete flag |
| POST | `/evaluate` | Evaluate a flag |


## Flag Model {#flag-model}


```json
{
  "id": "flag-uuid",
  "key": "new-survey-designer",
  "name": "New Survey Designer",
  "description": "Enable the new survey designer UI",
  "enabled": true,
  "environment": "production",
  "rules": [
    {
      "type": "percentage",
      "value": 50,
      "target": "users"
    },
    {
      "type": "tenant",
      "values": ["tenant-uuid-1", "tenant-uuid-2"]
    }
  ]
}
```


## Evaluating Flags {#evaluating-flags}


Services evaluate flags via the API or a cached client:

```python
POST /evaluate
{
  "flag_key": "new-survey-designer",
  "context": {
    "user_id": "user-uuid",
    "tenant_id": "tenant-uuid",
    "environment": "production"
  }
}

# Response
{
  "flag_key": "new-survey-designer",
  "enabled": true,
  "reason": "matched_percentage_rule"
}
```


## A/B Testing {#ab-testing}


Supports percentage-based rollouts for A/B testing:

```python
# 50% of users get the new feature
POST /flags
{
  "key": "new-dashboard-layout",
  "rules": [{"type": "percentage", "value": 50}]
}
```
