PerfCopilot

15Five Goals

15Five calls their goal objects Objectives and nests Key Results inside each one. PerfCopilot maps these directly: Objectives become Goal rows, inline Key Results become GoalKeyResult rows.

What we pull

  • Objectives — fetched from GET /objectives/?owner=<user_id>. The endpoint uses Django REST Framework pagination (results array). Fields: name, description (capped at 1,000 characters), status, start_date/end_date, created_at.
  • Key Results — pulled from the nested key_results array on each Objective. Fields: id, name, status, target_value or target.

Status mapping:

| 15Five status | PerfCopilot | |---|---| | achieved, completed, done | completed | | behind, at_risk | at_risk | | needs_attention, off_track, missed | off_track | | on_track / anything else | on_track |

needs_attention maps to off_track — in 15Five's UX this status requires the most intervention, so it's treated as the highest-risk state.

Connecting

  1. Go to /admin?tab=integrations, find the 15Five card.
  2. Generate a Personal API key in 15Five: Settings → API → Personal API Keys.
  3. Enter the key in the integration card. The base URL defaults to https://my.15five.com/api/public.
  4. Map each employee's 15Five user ID in the unmapped-employees list.

What hits a review

Goals and Key Results appear in the [GOALS] block of the review prompt, with KRs nested under their parent Objective.

Troubleshooting

Zero objectives after sync: confirm the user ID matches the owner field in 15Five. The ID is numeric and can be found in the 15Five admin user list.

Key Results missing: KRs are pulled from the key_results array embedded in each Objective response. If 15Five's API changes the field name to something other than key_results, the walk will silently find nothing. Contact support if KRs exist in 15Five but don't appear in PerfCopilot.

401 errors: Personal API keys in 15Five may have expiration dates set by your admin. Check the key's expiry in 15Five → Settings → API → Personal API Keys.

Privacy notes

  • Objective descriptions are stored up to 1,000 characters and visible to managers.
  • Key Result target values are stored as strings and visible alongside KR status in the Goals tab.