API-Referenz
Vollständige Dokumentation aller REST-API-Endpoints von Northly.
Base URL: https://api.northlyapp.com/v1
Objectives
Erstellen, lesen, aktualisieren und löschen Sie Objectives.
/objectivesdevelopers.apiRef.endpoints.objectives.list
Query-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
page | integer | Nein | Seitennummer für die Paginierung, Standard: 1. |
per_page | integer | Nein | Einträge pro Seite, Standard: 25, Max: 100. |
cycle_id | string | Nein | Nach OKR-Zyklus filtern. |
team_id | string | Nein | Nach Team filtern. |
pageintegerSeitennummer für die Paginierung, Standard: 1.
per_pageintegerEinträge pro Seite, Standard: 25, Max: 100.
cycle_idstringNach OKR-Zyklus filtern.
team_idstringNach Team filtern.
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/objectives?page=1&per_page=25" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"Beispiel-Response
{
"data": [
{
"id": "obj_abc123",
"title": "Increase customer retention",
"description": "Focus on reducing churn...",
"owner_id": "usr_xyz",
"cycle_id": "cyc_q1_2026",
"team_id": "team_product",
"progress": 0.65,
"status": "on_track",
"created_at": "2026-01-15T10:00:00Z",
"updated_at": "2026-03-01T14:30:00Z"
}
],
"meta": { "page": 1, "per_page": 25, "total": 42 }
}/objectives/:iddevelopers.apiRef.endpoints.objectives.get
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/objectives/obj_abc123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"Beispiel-Response
{
"data": {
"id": "obj_abc123",
"title": "Increase customer retention",
"description": "Focus on reducing churn...",
"owner_id": "usr_xyz",
"cycle_id": "cyc_q1_2026",
"team_id": "team_product",
"progress": 0.65,
"status": "on_track",
"key_results": [
{
"id": "kr_001",
"title": "Reduce monthly churn to < 2%",
"current_value": 2.3,
"target_value": 2.0,
"progress": 0.7
}
],
"created_at": "2026-01-15T10:00:00Z",
"updated_at": "2026-03-01T14:30:00Z"
}
}/objectivesdevelopers.apiRef.endpoints.objectives.create
Request Body
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
title | string | Ja | Titel des Objectives. |
description | string | Nein | Beschreibung des Objectives. |
cycle_id | string | Ja | ID des OKR-Zyklus. |
team_id | string | Nein | ID des Teams. |
owner_id | string | Nein | ID des verantwortlichen Benutzers. |
titlestringPflichtTitel des Objectives.
descriptionstringBeschreibung des Objectives.
cycle_idstringPflichtID des OKR-Zyklus.
team_idstringID des Teams.
owner_idstringID des verantwortlichen Benutzers.
Beispiel-Request
curl -X POST "https://api.northlyapp.com/v1/objectives" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Launch developer platform",
"description": "Build and ship public API...",
"cycle_id": "cyc_q2_2026",
"owner_id": "usr_xyz"
}'Beispiel-Response
{
"data": {
"id": "obj_new456",
"title": "Launch developer platform",
"description": "Build and ship public API...",
"owner_id": "usr_xyz",
"cycle_id": "cyc_q2_2026",
"progress": 0,
"status": "not_started",
"created_at": "2026-03-09T12:00:00Z",
"updated_at": "2026-03-09T12:00:00Z"
}
}/objectives/:iddevelopers.apiRef.endpoints.objectives.update
Request Body
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
title | string | Nein | Titel des Objectives. |
description | string | Nein | Beschreibung des Objectives. |
status | string | Nein | Status: not_started, on_track, at_risk, behind, completed. |
owner_id | string | Nein | ID des verantwortlichen Benutzers. |
titlestringTitel des Objectives.
descriptionstringBeschreibung des Objectives.
statusstringStatus: not_started, on_track, at_risk, behind, completed.
owner_idstringID des verantwortlichen Benutzers.
Beispiel-Request
curl -X PUT "https://api.northlyapp.com/v1/objectives/obj_abc123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Increase customer retention (updated)",
"status": "at_risk"
}'Beispiel-Response
{
"data": {
"id": "obj_abc123",
"title": "Increase customer retention (updated)",
"status": "at_risk",
"updated_at": "2026-03-09T15:00:00Z"
}
}/objectives/:iddevelopers.apiRef.endpoints.objectives.delete
Beispiel-Request
curl -X DELETE "https://api.northlyapp.com/v1/objectives/obj_abc123" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": {
"id": "obj_abc123",
"deleted": true
}
}Key Results
Verwalten Sie Key Results innerhalb von Objectives.
/objectives/:id/key-resultsdevelopers.apiRef.endpoints.keyResults.list
Query-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
page | integer | Nein | Seitennummer für die Paginierung, Standard: 1. |
per_page | integer | Nein | Einträge pro Seite, Standard: 25, Max: 100. |
pageintegerSeitennummer für die Paginierung, Standard: 1.
per_pageintegerEinträge pro Seite, Standard: 25, Max: 100.
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/objectives/obj_abc123/key-results" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": [
{
"id": "kr_001",
"objective_id": "obj_abc123",
"title": "Reduce monthly churn to < 2%",
"metric_type": "percentage",
"start_value": 4.5,
"current_value": 2.3,
"target_value": 2.0,
"progress": 0.88,
"owner_id": "usr_xyz",
"created_at": "2026-01-15T10:00:00Z"
}
],
"meta": { "page": 1, "per_page": 25, "total": 3 }
}/objectives/:id/key-results/:krIddevelopers.apiRef.endpoints.keyResults.get
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/objectives/obj_abc123/key-results/kr_001" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": {
"id": "kr_001",
"objective_id": "obj_abc123",
"title": "Reduce monthly churn to < 2%",
"metric_type": "percentage",
"start_value": 4.5,
"current_value": 2.3,
"target_value": 2.0,
"progress": 0.88,
"owner_id": "usr_xyz",
"check_ins": [
{ "id": "ci_01", "value": 3.1, "note": "Improved onboarding flow", "created_at": "2026-02-01T09:00:00Z" }
]
}
}/objectives/:id/key-resultsdevelopers.apiRef.endpoints.keyResults.create
Request Body
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
title | string | Ja | Titel des Key Results. |
metric_type | string | Ja | Metrik-Typ: number, percentage, currency, boolean. |
start_value | number | Ja | Startwert der Metrik. |
target_value | number | Ja | Zielwert der Metrik. |
owner_id | string | Nein | ID des verantwortlichen Benutzers. |
titlestringPflichtTitel des Key Results.
metric_typestringPflichtMetrik-Typ: number, percentage, currency, boolean.
start_valuenumberPflichtStartwert der Metrik.
target_valuenumberPflichtZielwert der Metrik.
owner_idstringID des verantwortlichen Benutzers.
Beispiel-Request
curl -X POST "https://api.northlyapp.com/v1/objectives/obj_abc123/key-results" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Increase NPS from 30 to 50",
"metric_type": "number",
"start_value": 30,
"target_value": 50
}'Beispiel-Response
{
"data": {
"id": "kr_new789",
"objective_id": "obj_abc123",
"title": "Increase NPS from 30 to 50",
"metric_type": "number",
"start_value": 30,
"current_value": 30,
"target_value": 50,
"progress": 0,
"created_at": "2026-03-09T12:00:00Z"
}
}/objectives/:id/key-results/:krIddevelopers.apiRef.endpoints.keyResults.update
Request Body
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
title | string | Nein | Titel des Key Results. |
current_value | number | Nein | Aktueller Wert der Metrik. |
target_value | number | Nein | Zielwert der Metrik. |
titlestringTitel des Key Results.
current_valuenumberAktueller Wert der Metrik.
target_valuenumberZielwert der Metrik.
Beispiel-Request
curl -X PUT "https://api.northlyapp.com/v1/objectives/obj_abc123/key-results/kr_001" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "current_value": 2.1 }'Beispiel-Response
{
"data": {
"id": "kr_001",
"title": "Reduce monthly churn to < 2%",
"current_value": 2.1,
"progress": 0.96,
"updated_at": "2026-03-09T15:00:00Z"
}
}/objectives/:id/key-results/:krIddevelopers.apiRef.endpoints.keyResults.delete
Beispiel-Request
curl -X DELETE "https://api.northlyapp.com/v1/objectives/obj_abc123/key-results/kr_001" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": {
"id": "kr_001",
"deleted": true
}
}Check-ins
Erfassen und verwalten Sie Fortschrittsupdates für Key Results.
/key-results/:id/check-insdevelopers.apiRef.endpoints.checkIns.list
Query-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
page | integer | Nein | Seitennummer für die Paginierung, Standard: 1. |
per_page | integer | Nein | Einträge pro Seite, Standard: 25, Max: 100. |
pageintegerSeitennummer für die Paginierung, Standard: 1.
per_pageintegerEinträge pro Seite, Standard: 25, Max: 100.
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/key-results/kr_001/check-ins" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": [
{
"id": "ci_01",
"key_result_id": "kr_001",
"value": 2.3,
"note": "Improved onboarding reduced churn significantly",
"author_id": "usr_xyz",
"created_at": "2026-03-01T09:00:00Z"
}
],
"meta": { "page": 1, "per_page": 25, "total": 8 }
}/key-results/:id/check-insdevelopers.apiRef.endpoints.checkIns.create
Request Body
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
value | number | Ja | Aktueller Metrikwert zum Zeitpunkt des Check-ins. |
note | string | Nein | Optionaler Kommentar zum Check-in. |
valuenumberPflichtAktueller Metrikwert zum Zeitpunkt des Check-ins.
notestringOptionaler Kommentar zum Check-in.
Beispiel-Request
curl -X POST "https://api.northlyapp.com/v1/key-results/kr_001/check-ins" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"value": 2.1,
"note": "New retention campaign launched"
}'Beispiel-Response
{
"data": {
"id": "ci_09",
"key_result_id": "kr_001",
"value": 2.1,
"note": "New retention campaign launched",
"author_id": "usr_xyz",
"created_at": "2026-03-09T12:00:00Z"
}
}/key-results/:id/check-ins/:checkInIddevelopers.apiRef.endpoints.checkIns.update
Request Body
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
value | number | Nein | Aktueller Metrikwert zum Zeitpunkt des Check-ins. |
note | string | Nein | Optionaler Kommentar zum Check-in. |
valuenumberAktueller Metrikwert zum Zeitpunkt des Check-ins.
notestringOptionaler Kommentar zum Check-in.
Beispiel-Request
curl -X PUT "https://api.northlyapp.com/v1/key-results/kr_001/check-ins/ci_09" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"value": 2.0,
"note": "Updated: target reached!"
}'Beispiel-Response
{
"data": {
"id": "ci_09",
"value": 2.0,
"note": "Updated: target reached!",
"updated_at": "2026-03-09T15:00:00Z"
}
}Cycles
Verwalten Sie OKR-Zyklen, z.B. Quartale.
/cyclesdevelopers.apiRef.endpoints.cycles.list
Query-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
page | integer | Nein | Seitennummer für die Paginierung, Standard: 1. |
per_page | integer | Nein | Einträge pro Seite, Standard: 25, Max: 100. |
status | string | Nein | Nach Zyklusstatus filtern: active, planned, completed. |
pageintegerSeitennummer für die Paginierung, Standard: 1.
per_pageintegerEinträge pro Seite, Standard: 25, Max: 100.
statusstringNach Zyklusstatus filtern: active, planned, completed.
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/cycles?status=active" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": [
{
"id": "cyc_q1_2026",
"name": "Q1 2026",
"starts_at": "2026-01-01T00:00:00Z",
"ends_at": "2026-03-31T23:59:59Z",
"status": "active",
"objectives_count": 12,
"overall_progress": 0.58
}
],
"meta": { "page": 1, "per_page": 25, "total": 4 }
}/cycles/:iddevelopers.apiRef.endpoints.cycles.get
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/cycles/cyc_q1_2026" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": {
"id": "cyc_q1_2026",
"name": "Q1 2026",
"starts_at": "2026-01-01T00:00:00Z",
"ends_at": "2026-03-31T23:59:59Z",
"status": "active",
"objectives_count": 12,
"overall_progress": 0.58
}
}/cyclesdevelopers.apiRef.endpoints.cycles.create
Request Body
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name | string | Ja | Name des Zyklus, z.B. Q2 2026. |
starts_at | string | Ja | Startdatum des Zyklus in ISO 8601. |
ends_at | string | Ja | Enddatum des Zyklus in ISO 8601. |
namestringPflichtName des Zyklus, z.B. Q2 2026.
starts_atstringPflichtStartdatum des Zyklus in ISO 8601.
ends_atstringPflichtEnddatum des Zyklus in ISO 8601.
Beispiel-Request
curl -X POST "https://api.northlyapp.com/v1/cycles" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Q2 2026",
"starts_at": "2026-04-01T00:00:00Z",
"ends_at": "2026-06-30T23:59:59Z"
}'Beispiel-Response
{
"data": {
"id": "cyc_q2_2026",
"name": "Q2 2026",
"starts_at": "2026-04-01T00:00:00Z",
"ends_at": "2026-06-30T23:59:59Z",
"status": "planned",
"objectives_count": 0,
"overall_progress": 0
}
}/cycles/:iddevelopers.apiRef.endpoints.cycles.update
Request Body
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
name | string | Nein | Name des Zyklus, z.B. Q2 2026. |
starts_at | string | Nein | Startdatum des Zyklus in ISO 8601. |
ends_at | string | Nein | Enddatum des Zyklus in ISO 8601. |
namestringName des Zyklus, z.B. Q2 2026.
starts_atstringStartdatum des Zyklus in ISO 8601.
ends_atstringEnddatum des Zyklus in ISO 8601.
Beispiel-Request
curl -X PUT "https://api.northlyapp.com/v1/cycles/cyc_q2_2026" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Q2 2026 (Extended)", "ends_at": "2026-07-15T23:59:59Z" }'Beispiel-Response
{
"data": {
"id": "cyc_q2_2026",
"name": "Q2 2026 (Extended)",
"ends_at": "2026-07-15T23:59:59Z",
"updated_at": "2026-03-09T15:00:00Z"
}
}Teams
Lesen Sie Team-Informationen und Team-Objectives.
/teamsdevelopers.apiRef.endpoints.teams.list
Query-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
page | integer | Nein | Seitennummer für die Paginierung, Standard: 1. |
per_page | integer | Nein | Einträge pro Seite, Standard: 25, Max: 100. |
pageintegerSeitennummer für die Paginierung, Standard: 1.
per_pageintegerEinträge pro Seite, Standard: 25, Max: 100.
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/teams" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": [
{
"id": "team_product",
"name": "Product Team",
"members_count": 8,
"objectives_count": 4,
"created_at": "2025-10-01T10:00:00Z"
}
],
"meta": { "page": 1, "per_page": 25, "total": 5 }
}/teams/:iddevelopers.apiRef.endpoints.teams.get
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/teams/team_product" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": {
"id": "team_product",
"name": "Product Team",
"members": [
{ "id": "usr_xyz", "name": "Anna Schmidt", "role": "lead" }
],
"members_count": 8,
"objectives_count": 4,
"created_at": "2025-10-01T10:00:00Z"
}
}/teams/:id/objectivesdevelopers.apiRef.endpoints.teams.objectives
Query-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
cycle_id | string | Nein | Nach OKR-Zyklus filtern. |
cycle_idstringNach OKR-Zyklus filtern.
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/teams/team_product/objectives?cycle_id=cyc_q1_2026" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": [
{
"id": "obj_abc123",
"title": "Increase customer retention",
"progress": 0.65,
"status": "on_track"
}
],
"meta": { "page": 1, "per_page": 25, "total": 4 }
}Benutzer
Benutzerinformationen abrufen.
/users/medevelopers.apiRef.endpoints.users.me
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/users/me" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": {
"id": "usr_xyz",
"name": "Anna Schmidt",
"email": "anna@example.com",
"role": "admin",
"teams": ["team_product", "team_engineering"],
"created_at": "2025-08-01T10:00:00Z"
}
}/usersdevelopers.apiRef.endpoints.users.list
Query-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
page | integer | Nein | Seitennummer für die Paginierung, Standard: 1. |
per_page | integer | Nein | Einträge pro Seite, Standard: 25, Max: 100. |
team_id | string | Nein | Nach Team filtern. |
pageintegerSeitennummer für die Paginierung, Standard: 1.
per_pageintegerEinträge pro Seite, Standard: 25, Max: 100.
team_idstringNach Team filtern.
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/users?team_id=team_product" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": [
{
"id": "usr_xyz",
"name": "Anna Schmidt",
"email": "anna@example.com",
"role": "admin"
}
],
"meta": { "page": 1, "per_page": 25, "total": 15 }
}Alignments
Objective-Abhängigkeiten und Ausrichtungen verwalten.
/alignmentsdevelopers.apiRef.endpoints.alignments.list
Query-Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
objective_id | string | Nein | Nach Objective-ID filtern. |
objective_idstringNach Objective-ID filtern.
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/alignments?objective_id=obj_company_01" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": [
{
"id": "align_001",
"parent_objective_id": "obj_company_01",
"child_objective_id": "obj_abc123",
"alignment_type": "supports",
"created_at": "2026-01-15T10:00:00Z"
}
],
"meta": { "page": 1, "per_page": 25, "total": 6 }
}/alignmentsdevelopers.apiRef.endpoints.alignments.create
Request Body
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
parent_objective_id | string | Ja | ID des übergeordneten Objectives. |
child_objective_id | string | Ja | ID des untergeordneten Objectives. |
alignment_type | string | Nein | Art der Ausrichtung: supports, contributes_to. |
parent_objective_idstringPflichtID des übergeordneten Objectives.
child_objective_idstringPflichtID des untergeordneten Objectives.
alignment_typestringArt der Ausrichtung: supports, contributes_to.
Beispiel-Request
curl -X POST "https://api.northlyapp.com/v1/alignments" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"parent_objective_id": "obj_company_01",
"child_objective_id": "obj_team_05"
}'Beispiel-Response
{
"data": {
"id": "align_new002",
"parent_objective_id": "obj_company_01",
"child_objective_id": "obj_team_05",
"alignment_type": "supports",
"created_at": "2026-03-09T12:00:00Z"
}
}Webhooks
Webhook-Subscriptions erstellen und verwalten.
/webhooksdevelopers.apiRef.endpoints.webhooks.list
Beispiel-Request
curl -X GET "https://api.northlyapp.com/v1/webhooks" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": [
{
"id": "wh_001",
"url": "https://example.com/webhooks/northly",
"events": ["objective.updated", "check_in.created"],
"active": true,
"created_at": "2026-02-01T10:00:00Z"
}
],
"meta": { "page": 1, "per_page": 25, "total": 2 }
}/webhooksdevelopers.apiRef.endpoints.webhooks.create
Request Body
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
url | string | Ja | URL, an die Webhook-Events gesendet werden. |
events | string[] | Ja | Array der zu abonnierenden Event-Typen. |
secret | string | Nein | Optionaler Secret-Key zur Signaturverifizierung. |
urlstringPflichtURL, an die Webhook-Events gesendet werden.
eventsstring[]PflichtArray der zu abonnierenden Event-Typen.
secretstringOptionaler Secret-Key zur Signaturverifizierung.
Beispiel-Request
curl -X POST "https://api.northlyapp.com/v1/webhooks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/webhooks/northly",
"events": ["objective.updated", "check_in.created"]
}'Beispiel-Response
{
"data": {
"id": "wh_new003",
"url": "https://example.com/webhooks/northly",
"events": ["objective.updated", "check_in.created"],
"active": true,
"secret": "whsec_...",
"created_at": "2026-03-09T12:00:00Z"
}
}/webhooks/:iddevelopers.apiRef.endpoints.webhooks.delete
Beispiel-Request
curl -X DELETE "https://api.northlyapp.com/v1/webhooks/wh_001" \
-H "Authorization: Bearer YOUR_API_KEY"Beispiel-Response
{
"data": {
"id": "wh_001",
"deleted": true
}
}