Partners

API

Last updated: 23 September 2026

Public partner reference for Odiyle Keşfediyorum: school sign-in, shared identity, completion events, Jupas, and transactional mail. Application routes under /api/ are not listed here.

Overview

What this page covers

A public contract for school portals and Macenta products that connect to Odiyle Keşfediyorum. It describes identity, sign-in, shared progress, and transactional mail — not private application endpoints.

Product code
odi-tr
Audience
School LMS partners, Macenta product teams, and schools adding Odiyle Keşfediyorum without custom product code.
Status
Living reference. Existing school links keep working while the shared Macenta services roll out.

Identity

Who a user is

Odiyle Keşfediyorum maps a school person to one platform account. The school mailbox is stored when provided; sign-in uses the platform address.

username
Stable school username (no domain).
loginHint
Platform sign-in address: {username}@odiylekesfediyorum.com.
orgEmail
Optional real school mailbox. Not used to sign in.
displayName
Given name and family name.
role
student, teacher, school_admin, or system_admin.
orgId / orgName
School or organisation.
campusId / campusName
Campus within the school.
classes[]
Class name and grade (1–4).
locale
Preferred interface language, for example tr.
entitlements[]
Macenta products this person may open.
Roles in Odiyle Keşfediyorum
RoleAfter sign-in
studentLearner home, themes, and tasks
teacherClass tools and progress
school_adminSchool-wide administration
system_adminPublisher operations

Sign-in

How a school sends a learner

The school portal redirects the browser to Odiyle Keşfediyorum with a short-lived signed session token. The product creates or resumes the matching account. Entitled Macenta products open without signing in again.

Entry URL: https://odiylekesfediyorum.com/login?token=<signed-token>

The token payload should identify the person (username, name, role) and their organisation (school, campus, classes). Teachers may belong to more than one class.

POST /v1/auth/exchange — request
{
  "grantType": "lms_token",
  "product": "odi-tr",
  "lmsToken": "<signed school session token>"
}
POST /v1/auth/exchange — response
{
  "macentaUserId": "usr_example",
  "launchToken": "<short-lived token>",
  "user": {
    "username": "student123",
    "loginHint": "student123@odiylekesfediyorum.com",
    "orgEmail": "student123@example-school.edu",
    "displayName": "Ada Example",
    "role": "student",
    "orgId": "example-school",
    "orgName": "Example School",
    "campusName": "Main Campus",
    "classes": [{ "name": "3A", "grade": 3 }],
    "locale": "tr",
    "entitlements": ["odi-tr"]
  }
}

Completions

Progress that can be shared

Authorised products may read portable activity. Odiyle Keşfediyorum does not publish project files, audio bodies, or Jupa wallets through this contract.

activity.completed
A theme or task is finished.
quiz.completed
A practice or quiz attempt is submitted, with score and time spent.
assignment.submitted
A project or open task is handed in. File and audio bodies are not shared by default.
session.seen
The learner was last active.

Portable data fields

unitId
Theme or unit title.
sectionId
Task within the theme.
progressPercent
Completed tasks divided by total tasks.
score / maxScore
Normalised lesson or quiz score, typically 0–100.
durationSec
Activity duration, when recorded.
timeSpentSec
Quiz time on task.
streakDays
Consecutive active days.
lastSeenAt
Most recent activity timestamp (ISO 8601).
POST /v1/events
{
  "product": "odi-tr",
  "macentaUserId": "usr_example",
  "type": "activity.completed",
  "occurredAt": "2026-09-23T10:00:00Z",
  "orgId": "example-school",
  "className": "3A",
  "data": {
    "unitId": "Water and Life",
    "sectionId": "task-2",
    "progressPercent": 40,
    "score": 80,
    "maxScore": 100
  }
}

Stays inside Odiyle Keşfediyorum

  • Jupa wallet balances
  • Badge and certificate catalogues
  • Class and school leaderboards
  • Grade 1–4 theme and task catalogues
  • Avatars
  • Individual trial and subscription status
  • Project files, lesson audio, and teacher comments

Jupas

Points in Odiyle Keşfediyorum

Jupas are the in-product points learners earn from themes, tasks, quizzes, and teacher marks.

Partners can consume portable scores and completion percentages. They do not create, spend, or correct Jupa balances. A lesson score on a completion event is a 0–100 result, not a wallet mutation.

Email

Transactional mail

Odiyle Keşfediyorum sends a small volume of branded operational messages to named administrators and publisher liaisons — not to every teacher, and not to parents by default.

Mail is sent as Odiyle Keşfediyorum from noreply@odiylekesfediyorum.com. The product still decides who receives a message and builds the HTML. A shared Macenta mail service only delivers the message.

POST /v1/mail/send
{
  "product": "odi-tr",
  "from": { "email": "noreply@odiylekesfediyorum.com", "name": "Odiyle Keşfediyorum" },
  "replyTo": "destek@macenta.com.tr",
  "to": ["head@example-school.edu"],
  "subject": "Odiyle Keşfediyorum | Example School notice",
  "html": "<!DOCTYPE html>…",
  "tags": {
    "type": "ops_alert",
    "school": "Example School"
  }
}

HTTP

Partner reference

Draft Macenta partner paths. They are not this website’s /api/ application routes. Errors return a short code; products map that to a safe message.

Partner HTTP methods and paths
MethodPathPurpose
POST/v1/auth/exchangeExchange a school or product session for a short-lived launch token and profile.
GET/v1/meReturn the signed-in profile.
GET/v1/users/{id}Read a user in the same organisation, when authorised.
POST/v1/launchOpen another entitled Macenta product without signing in again.
GET/v1/productsList products this organisation may use.
PUT/v1/orgs/{orgId}Register or update a school once. No product-side custom code for a standard school.
POST/v1/mail/sendSend transactional HTML mail as Odiyle Keşfediyorum.
POST/v1/eventsPublish a portable completion or activity event.
GET/v1/users/{id}/activityRead portable activity for an authorised viewer.
POST /v1/launch
{
  "from": "odi-tr",
  "to": "the-globals",
  "macentaUserId": "usr_example",
  "returnUrl": "https://odiylekesfediyorum.com/app",
  "locale": "tr",
  "context": {
    "assignmentId": "theme-water-task-2",
    "completion": {
      "unitId": "Water and Life",
      "sectionId": "task-2"
    }
  }
}
PUT /v1/orgs/{orgId}
{
  "displayName": "Example School",
  "products": ["odi-tr"],
  "campuses": [{ "id": "main", "name": "Main Campus" }]
}
Error body
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "This request is not allowed."
  }
}

Schools

Adding a school

Register the organisation once — name, campuses, and entitled products. Learners then arrive from the school portal or from a provisioned roster.

A standard school does not need custom work inside Odiyle Keşfediyorum. For access or a test organisation, write to destek@macenta.com.tr.

Back to Odiyle Keşfediyorum