Perdoo Goals
Perdoo is an OKR platform with Objectives containing Key Results. PerfCopilot syncs both: Objectives become Goal rows, Key Results become GoalKeyResult rows.
One notable difference from other goal providers: Perdoo uses Authorization: Token <api_key> (not Bearer) in its auth header.
What we pull
- Objectives — fetched from
GET /objectives/?owner=<user_id>. Perdoo uses Django REST Framework pagination (resultsarray). Fields:nameortitle,description(capped at 1,000 characters),status,start_date/end_dateordue_date,created_at. - Key Results — pulled from the
key_resultsorresultsarray on each Objective. Fields:id,name,status,target_valueortarget.
Status mapping:
| Perdoo status | PerfCopilot |
|---|---|
| successful, completed, done, achieved | completed |
| behind, at_risk | at_risk |
| unsuccessful, off_track, missed | off_track |
| ongoing / anything else | on_track |
unsuccessful maps to off_track; ongoing maps to on_track.
Connecting
- Go to
/admin?tab=integrations, find the Perdoo card. - Get your API key from Perdoo: Settings → API (requires Perdoo admin access). Token auth, not OAuth.
- Enter the key in the integration card. Base URL defaults to
https://app.perdoo.com/api/v3. - Map each employee's Perdoo user ID in the unmapped-employees list.
What hits a review
Goals and Key Results appear in the [GOALS] block of the review prompt.
Troubleshooting
Auth errors (401): confirm you're using Token <key> auth — Perdoo does not use Bearer. The PerfCopilot ingester handles this correctly, but if you're testing the API directly, use Authorization: Token <your-key>.
Zero objectives: the owner query parameter must match the employee's Perdoo user ID exactly. Perdoo user IDs are UUIDs visible in the URL when viewing a user in Perdoo admin.
Key Results under results vs key_results: the ingester checks both field names. If Perdoo's v3 API uses a different field, KRs won't appear. Verify the field name in Perdoo's API docs or contact support.
Privacy notes
- Objective descriptions are stored up to 1,000 characters and visible to managers.
- The hard cap is 200 objectives per employee per sync. Orgs with very active OKR cycles should confirm active objective counts stay under this limit.