Northly

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.

GET/objectives

developers.apiRef.endpoints.objectives.list

Query-Parameter
pageinteger

Seitennummer für die Paginierung, Standard: 1.

per_pageinteger

Einträge pro Seite, Standard: 25, Max: 100.

cycle_idstring

Nach OKR-Zyklus filtern.

team_idstring

Nach Team filtern.

Beispiel-Request
bash
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
json
{
  "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 }
}
GET/objectives/:id

developers.apiRef.endpoints.objectives.get

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/objectives/obj_abc123" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"
Beispiel-Response
json
{
  "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"
  }
}
POST/objectives

developers.apiRef.endpoints.objectives.create

Request Body
titlestringPflicht

Titel des Objectives.

descriptionstring

Beschreibung des Objectives.

cycle_idstringPflicht

ID des OKR-Zyklus.

team_idstring

ID des Teams.

owner_idstring

ID des verantwortlichen Benutzers.

Beispiel-Request
bash
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
json
{
  "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"
  }
}
PUT/objectives/:id

developers.apiRef.endpoints.objectives.update

Request Body
titlestring

Titel des Objectives.

descriptionstring

Beschreibung des Objectives.

statusstring

Status: not_started, on_track, at_risk, behind, completed.

owner_idstring

ID des verantwortlichen Benutzers.

Beispiel-Request
bash
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
json
{
  "data": {
    "id": "obj_abc123",
    "title": "Increase customer retention (updated)",
    "status": "at_risk",
    "updated_at": "2026-03-09T15:00:00Z"
  }
}
DELETE/objectives/:id

developers.apiRef.endpoints.objectives.delete

Beispiel-Request
bash
curl -X DELETE "https://api.northlyapp.com/v1/objectives/obj_abc123" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "data": {
    "id": "obj_abc123",
    "deleted": true
  }
}

Key Results

Verwalten Sie Key Results innerhalb von Objectives.

GET/objectives/:id/key-results

developers.apiRef.endpoints.keyResults.list

Query-Parameter
pageinteger

Seitennummer für die Paginierung, Standard: 1.

per_pageinteger

Einträge pro Seite, Standard: 25, Max: 100.

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/objectives/obj_abc123/key-results" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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 }
}
GET/objectives/:id/key-results/:krId

developers.apiRef.endpoints.keyResults.get

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/objectives/obj_abc123/key-results/kr_001" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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" }
    ]
  }
}
POST/objectives/:id/key-results

developers.apiRef.endpoints.keyResults.create

Request Body
titlestringPflicht

Titel des Key Results.

metric_typestringPflicht

Metrik-Typ: number, percentage, currency, boolean.

start_valuenumberPflicht

Startwert der Metrik.

target_valuenumberPflicht

Zielwert der Metrik.

owner_idstring

ID des verantwortlichen Benutzers.

Beispiel-Request
bash
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
json
{
  "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"
  }
}
PUT/objectives/:id/key-results/:krId

developers.apiRef.endpoints.keyResults.update

Request Body
titlestring

Titel des Key Results.

current_valuenumber

Aktueller Wert der Metrik.

target_valuenumber

Zielwert der Metrik.

Beispiel-Request
bash
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
json
{
  "data": {
    "id": "kr_001",
    "title": "Reduce monthly churn to < 2%",
    "current_value": 2.1,
    "progress": 0.96,
    "updated_at": "2026-03-09T15:00:00Z"
  }
}
DELETE/objectives/:id/key-results/:krId

developers.apiRef.endpoints.keyResults.delete

Beispiel-Request
bash
curl -X DELETE "https://api.northlyapp.com/v1/objectives/obj_abc123/key-results/kr_001" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "data": {
    "id": "kr_001",
    "deleted": true
  }
}

Check-ins

Erfassen und verwalten Sie Fortschrittsupdates für Key Results.

GET/key-results/:id/check-ins

developers.apiRef.endpoints.checkIns.list

Query-Parameter
pageinteger

Seitennummer für die Paginierung, Standard: 1.

per_pageinteger

Einträge pro Seite, Standard: 25, Max: 100.

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/key-results/kr_001/check-ins" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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 }
}
POST/key-results/:id/check-ins

developers.apiRef.endpoints.checkIns.create

Request Body
valuenumberPflicht

Aktueller Metrikwert zum Zeitpunkt des Check-ins.

notestring

Optionaler Kommentar zum Check-in.

Beispiel-Request
bash
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
json
{
  "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"
  }
}
PUT/key-results/:id/check-ins/:checkInId

developers.apiRef.endpoints.checkIns.update

Request Body
valuenumber

Aktueller Metrikwert zum Zeitpunkt des Check-ins.

notestring

Optionaler Kommentar zum Check-in.

Beispiel-Request
bash
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
json
{
  "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.

GET/cycles

developers.apiRef.endpoints.cycles.list

Query-Parameter
pageinteger

Seitennummer für die Paginierung, Standard: 1.

per_pageinteger

Einträge pro Seite, Standard: 25, Max: 100.

statusstring

Nach Zyklusstatus filtern: active, planned, completed.

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/cycles?status=active" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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 }
}
GET/cycles/:id

developers.apiRef.endpoints.cycles.get

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/cycles/cyc_q1_2026" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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
  }
}
POST/cycles

developers.apiRef.endpoints.cycles.create

Request Body
namestringPflicht

Name des Zyklus, z.B. Q2 2026.

starts_atstringPflicht

Startdatum des Zyklus in ISO 8601.

ends_atstringPflicht

Enddatum des Zyklus in ISO 8601.

Beispiel-Request
bash
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
json
{
  "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
  }
}
PUT/cycles/:id

developers.apiRef.endpoints.cycles.update

Request Body
namestring

Name des Zyklus, z.B. Q2 2026.

starts_atstring

Startdatum des Zyklus in ISO 8601.

ends_atstring

Enddatum des Zyklus in ISO 8601.

Beispiel-Request
bash
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
json
{
  "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.

GET/teams

developers.apiRef.endpoints.teams.list

Query-Parameter
pageinteger

Seitennummer für die Paginierung, Standard: 1.

per_pageinteger

Einträge pro Seite, Standard: 25, Max: 100.

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/teams" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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 }
}
GET/teams/:id

developers.apiRef.endpoints.teams.get

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/teams/team_product" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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"
  }
}
GET/teams/:id/objectives

developers.apiRef.endpoints.teams.objectives

Query-Parameter
cycle_idstring

Nach OKR-Zyklus filtern.

Beispiel-Request
bash
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
json
{
  "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.

GET/users/me

developers.apiRef.endpoints.users.me

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/users/me" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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"
  }
}
GET/users

developers.apiRef.endpoints.users.list

Query-Parameter
pageinteger

Seitennummer für die Paginierung, Standard: 1.

per_pageinteger

Einträge pro Seite, Standard: 25, Max: 100.

team_idstring

Nach Team filtern.

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/users?team_id=team_product" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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.

GET/alignments

developers.apiRef.endpoints.alignments.list

Query-Parameter
objective_idstring

Nach Objective-ID filtern.

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/alignments?objective_id=obj_company_01" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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 }
}
POST/alignments

developers.apiRef.endpoints.alignments.create

Request Body
parent_objective_idstringPflicht

ID des übergeordneten Objectives.

child_objective_idstringPflicht

ID des untergeordneten Objectives.

alignment_typestring

Art der Ausrichtung: supports, contributes_to.

Beispiel-Request
bash
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
json
{
  "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.

GET/webhooks

developers.apiRef.endpoints.webhooks.list

Beispiel-Request
bash
curl -X GET "https://api.northlyapp.com/v1/webhooks" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "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 }
}
POST/webhooks

developers.apiRef.endpoints.webhooks.create

Request Body
urlstringPflicht

URL, an die Webhook-Events gesendet werden.

eventsstring[]Pflicht

Array der zu abonnierenden Event-Typen.

secretstring

Optionaler Secret-Key zur Signaturverifizierung.

Beispiel-Request
bash
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
json
{
  "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"
  }
}
DELETE/webhooks/:id

developers.apiRef.endpoints.webhooks.delete

Beispiel-Request
bash
curl -X DELETE "https://api.northlyapp.com/v1/webhooks/wh_001" \
  -H "Authorization: Bearer YOUR_API_KEY"
Beispiel-Response
json
{
  "data": {
    "id": "wh_001",
    "deleted": true
  }
}

Bereit, Ihre OKRs in messbare Ergebnisse zu verwandeln?

Starten Sie noch heute kostenlos mit Northly — der OKR Software, die KI-Coaching, Strategy Maps und automatische Check-ins vereint. Keine Kreditkarte erforderlich.