# SafetyReport

> The SafetyReport object in the Guv API.

## Fields

| Field | Type | Description |
| --- | --- | --- |
| `project_id` * | string |  |
| `environment` | string or null |  |
| `grade` * | [SafetyGrade](/docs/api/objects/safety-grade/) |  |
| `score` * | integer |  |
| `summary` | string |  |
| `counts` | object |  |
| `checks` * | array of [SafetyCheck](/docs/api/objects/safety-check/) |  |
| `badge` | object |  |
| `checked_at` * | string (date-time) |  |

\* always present

## Example

```json
{
  "project_id": "string",
  "environment": "string",
  "grade": "A",
  "score": 0,
  "summary": "Grade B. One thing to fix: members without passkeys.",
  "counts": {
    "pass": 1,
    "warn": 1,
    "fail": 1
  },
  "checks": [
    {
      "id": "chk_01jbx2m9k7q4r8t5v6w3y0z1ck",
      "category": "secrets_in_bundle",
      "status": "fail",
      "severity": "critical",
      "title": "Secret visible in your website's code",
      "finding": "Your SUPABASE_SERVICE_ROLE_KEY is visible to anyone visiting your site.",
      "environment": "production",
      "resource": {
        "type": "service",
        "id": "svc_01jbx2m9k7q4r8t5v6w3y0z1sv",
        "name": "web"
      },
      "blocks_deploy": true,
      "fix": [
        {
          "kind": "manual",
          "label": "Rotate the key in Supabase, then update it here",
          "command": "guv secrets rotate SUPABASE_SERVICE_ROLE_KEY --env production"
        },
        {
          "kind": "open_pr",
          "label": "Ask AI to move the key server-side (opens a PR)"
        }
      ],
      "acknowledged": null,
      "detected_at": "2026-10-23T14:03:00Z",
      "resolved_at": null
    }
  ],
  "badge": {
    "enabled": false,
    "url": "https://guv.dev/",
    "svg_url": "https://guv.dev/"
  },
  "checked_at": "2026-10-22T13:05:00Z"
}
```

## Used by

- [Safety Centre grade and checks](/docs/api/safety/#safety-centre-grade-and-checks)
