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.
| Role | After sign-in |
|---|---|
| student | Learner home, themes, and tasks |
| teacher | Class tools and progress |
| school_admin | School-wide administration |
| system_admin | Publisher 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.
{
"grantType": "lms_token",
"product": "odi-tr",
"lmsToken": "<signed school session token>"
}{
"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).
{
"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.
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.
{
"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.
| Method | Path | Purpose |
|---|---|---|
| POST | /v1/auth/exchange | Exchange a school or product session for a short-lived launch token and profile. |
| GET | /v1/me | Return the signed-in profile. |
| GET | /v1/users/{id} | Read a user in the same organisation, when authorised. |
| POST | /v1/launch | Open another entitled Macenta product without signing in again. |
| GET | /v1/products | List 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/send | Send transactional HTML mail as Odiyle Keşfediyorum. |
| POST | /v1/events | Publish a portable completion or activity event. |
| GET | /v1/users/{id}/activity | Read portable activity for an authorised viewer. |
{
"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"
}
}
}{
"displayName": "Example School",
"products": ["odi-tr"],
"campuses": [{ "id": "main", "name": "Main Campus" }]
}{
"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.