Nest Data API
A read-only HTTP API over the Nest product database (read replica). Authenticate with a bearer key and pull JSON. Two curated datasets cover the common cases; generic access exposes every non-secret table.
Curated datasets
Pre-joined, cleanly-shaped views with a stable field contract (nest_data, meetings). Start here for student profiles & sessions.
Raw tables
Direct read access to all 102 non-secret tables for anything the curated datasets don't cover. Same auth, generic shape.
nest_data
curated datasetPeople & Coachingread-onlyA pre-joined view of student profiles — one clean row per student, pulled from users, program_user, programs, coach_student and roles. Use this instead of stitching those raw tables together yourself.
Fields
| Field | Type | Description |
|---|---|---|
| person_id | string (ULID) | Nest person id |
| full_name | string | Student's full name |
| string | Primary email | |
| program | string | Most recent enrolled program |
| coach | string | Assigned coach |
| status | string | active · suspended · archived |
| last_activity_at | timestamp | Most recent activity (UTC) |
Call it
curl -s "https://nest-data-api.egelloc.com/v1/nest_data?limit=100" \ -H "Authorization: Bearer $NEST_API_KEY"
meetings
curated datasetEngagementread-onlyA shaped view of coaching sessions for a student — bookings joined to call_types and the host coach. Requires a person_id.
Fields
| Field | Type | Description |
|---|---|---|
| meeting_id | string (ULID) | Booking id |
| person_id | string (ULID) | Student |
| host | string | Coach hosting the session |
| type | string | Call type |
| scheduled_at | timestamp | Scheduled start (UTC) |
| duration_min | integer | Minutes |
| status | string | scheduled · completed · cancelled · no_show · rescheduled |
Call it
curl -s "https://nest-data-api.egelloc.com/v1/meetings?person_id=01JKHBVWRXFX2KPZN2TX8DWWG4" \ -H "Authorization: Bearer $NEST_API_KEY"
student_profile
curated datasetPeople & Coachingread-onlyA student's academic / college profile from student_details, keyed by person_id. Home-address fields are intentionally excluded. Pairs with nest_data (identity) and meetings (sessions).
Fields
| Field | Type | Description |
|---|---|---|
| person_id | string (ULID) | Nest person id |
| full_name | string | Student's full name |
| school_name / school_city / school_state / school_country | string | Current school |
| current_grade | string | Grade level |
| expected_graduation_year | string | Expected HS graduation year |
| current_gpa / gpa_type / scale_type | string | GPA and scale |
| class_rank / sat_score / act_score | string | Academic standing & test scores |
| career_aspirations / possible_major | string | Goals |
| college_goals | json | Target colleges / goals |
| college_factors / scholastic_honors | string | Preferences & honors |
| updated_at | timestamp | Profile last updated (UTC) |
Call it
curl -s "https://nest-data-api.egelloc.com/v1/student_profile/01JKHBVWRXFX2KPZN2TX8DWWG4" \ -H "Authorization: Bearer $NEST_API_KEY"
meeting_notes
curated datasetPeople & Coachingread-onlyA student's coaching session notes — meeting_notes joined to the host coach and its attached doc links, newest first. Requires a person_id; optional coach_id.
Fields
| Field | Type | Description |
|---|---|---|
| note_id | string (ULID) | Note id |
| person_id | string (ULID) | Student |
| coach | string | Host coach |
| date | date | Session date |
| meeting_type | string | Type of session |
| subject | string | Subject/title |
| note | text | Session note (student-facing) |
| internal_note | text | Coach-facing internal note |
| links | string[] | Attached doc URLs |
Call it
curl -s "https://nest-data-api.egelloc.com/v1/meeting_notes?person_id=01JKHBVWRXFX2KPZN2TX8DWWG4" \ -H "Authorization: Bearer $NEST_API_KEY"
check_ins
curated datasetPeople & Coachingread-onlyA student's weekly check-ins with their Q&A nested per check-in. Requires person_id; optional status (pending · completed · missed · excused). Newest week first.
Fields
| Field | Type | Description |
|---|---|---|
| check_in_id | string (ULID) | Check-in id |
| person_id | string (ULID) | Student |
| week_end | date | Week the check-in covers |
| status | string | pending · completed · missed · excused |
| rating | integer | Self-rating (nullable) |
| submitted_at | timestamp | When submitted (UTC) |
| responses | object[] | [{ position, question, answer }] |
Call it
curl -s "https://nest-data-api.egelloc.com/v1/check_ins?person_id=01JKHBVWRXFX2KPZN2TX8DWWG4" \ -H "Authorization: Bearer $NEST_API_KEY"
essays
curated datasetPeople & Coachingread-onlyA student's essays. The list is light (metadata); the single-essay endpoint adds the full body + feedback. Requires person_id for the list; optional status / type. Newest first.
List fields
| Field | Type |
|---|---|
| essay_id / person_id | string (ULID) |
| name / type / target_name / prompt_title | string |
| word_count / character_count / limit_count / revision_number | integer |
| limit_type / status | string |
| submitted_at / due_date / application_deadline / updated_at | timestamp |
Single (GET /v1/essays/{essay_id}) additionally returns prompt_text, essay_text, submitted_essay_text, and the editor/coach/student feedback fields + loom_url.
Call it
curl -s "https://nest-data-api.egelloc.com/v1/essays?person_id=01JK…&status=in_review" -H "Authorization: Bearer $NEST_API_KEY"
conversations
curated datasetPeople & Coachingread-onlyStudent↔coach message threads and their messages. Requires person_id for the thread list; optional status / type. Messages are fetched per thread.
Endpoints
Thread fields: conversation_id, person_id, type, title, status, coach, last_message_at, created_at.
Message fields: message_id, conversation_id, sender_role, sender, message, is_system_message, created_at, edited_at (soft-deleted excluded).
Call it
curl -s "https://nest-data-api.egelloc.com/v1/conversations/01JK…/messages" -H "Authorization: Bearer $NEST_API_KEY"
staff
curated datasetPeople & Coachingread-onlyegelloC staff directory — users holding a coach/admin/CX/Strategist/editor role, with their roles aggregated. Optional status and role filters.
Fields
| Field | Type |
|---|---|
| person_id | string (ULID) |
| full_name / email / status / avatar | string |
| roles | string[] |
Call it
curl -s "https://nest-data-api.egelloc.com/v1/staff?role=coach" -H "Authorization: Bearer $NEST_API_KEY"
Using the API
All routes are read-only GETs returning JSON, over HTTPS. Base URL https://nest-data-api.egelloc.com/v1.
Authentication
Send a bearer key on every data route (this catalog and health need none). Keys are scoped — nest_students, nest_meetings, nest_other.
Authorization: Bearer <your-api-key>
| Situation | Status | Meaning |
|---|---|---|
| valid key, in scope | 200 | Data returned |
| missing / bad key | 401 | No or invalid Authorization header |
| wrong scope | 403 | Key not scoped for that dataset |
| unknown id / table | 404 | No matching row or non-readable table |
| bad filter column | 400 | Filter column not on that table |
Pagination
| Param | Type | Description |
|---|---|---|
| limit | integer | Rows to return. Default 100, max 1000 |
| offset | integer | Rows to skip. Default 0 |
List responses are enveloped: { items, limit, offset, total }.
Generic table access
Read any non-secret table directly. Columns come from the read-only grant, so responses never include password hashes, auth/OAuth tokens, or reset tokens.
curl -s "https://nest-data-api.egelloc.com/v1/tables/essays?type=personal_statement&limit=50" \ -H "Authorization: Bearer $NEST_API_KEY"
Any column can be an equality filter. Excluded: password hashes, remember_token, personal_access_tokens, password_reset_tokens, SSO/OAuth creds, session/cache/job tables.
Health & docs
curl -s https://nest-data-api.egelloc.com/v1/health → {"status":"ok"} curl -s https://nest-data-api.egelloc.com/v1/health/db → {"status":"ok","db":"ok"}