Kadoink

Kadoink API

A JSON REST API — the same one the Kadoink mobile apps run on. Everything lives under one versioned base URL and speaks bearer-token auth.

https://www.kadoink.com/api/v1

Authentication

Sign in with POST /auth/login (or finish the /auth/register flow). On success you get a bearer token that starts with kdk_. Send it on every request:

Authorization: Bearer kdk_…

Tokens are revocable — signing out, changing your password, or DELETE /auth/sessions invalidate them server-side. If your account has an email on file, login first returns {"status":"otp_required", …} and you confirm a code via /auth/login/verify. Most endpoints also require a verified mobile number; until then they answer 403 mobile_unverified and you complete verification under /me/mobile.

Conventions

Format
JSON in and out; field names are snake_case.
Timestamps
ISO-8601 UTC with a trailing Z (e.g. 2026-06-11T18:00:00Z).
Lists
{"items": […], "has_more": bool}; page with ?limit=&offset= or a ?before_id= cursor.
Phone numbers
E.164 (e.g. +15551234567). Tag names omit the * sigil.
Rate limits
Sign-in, SMS, and call endpoints are throttled; over budget you get 429 with a Retry-After header.

Errors

Every non-2xx response uses one envelope:

{
  "error": {
    "code": "validation_failed",
    "message": "One or more fields are invalid.",
    "fields": { "email": "That doesn't look like a valid email address." }
  }
}

Switch on code (a stable machine string), show message to people. Common statuses: 401 (missing or invalid token), 403 mobile_unverified, 404 not_found, 409 (conflict), 422 validation_failed, 429 rate_limited.

Quickstart

# 1. Sign in -> token
curl -X POST https://www.kadoink.com/api/v1/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"username":"you","password":"your-password"}'

# 2. Use the token
curl https://www.kadoink.com/api/v1/home \
  -H 'Authorization: Bearer kdk_…'

Endpoints

92 endpoints, all relative to https://www.kadoink.com/api/v1.

Authentication

Get a bearer token, manage sessions, reset a password.

POST /api/v1/auth/forgot — Request a password reset
POST /api/v1/auth/login — Sign in
POST /api/v1/auth/login/resend — Resend sign-in code
POST /api/v1/auth/login/verify — Verify sign-in code
POST /api/v1/auth/logout — Sign out
POST /api/v1/auth/magic-link — Send a magic sign-in link
POST /api/v1/auth/magic-link/consume — Consume a magic link
POST /api/v1/auth/refresh — Refresh session token
POST /api/v1/auth/register — Register
POST /api/v1/auth/register/resend — Resend registration code
POST /api/v1/auth/register/verify — Verify registration code
POST /api/v1/auth/reset — Reset password
DELETE /api/v1/auth/sessions — Sign out everywhere
GET /api/v1/auth/sessions — List active sessions
DELETE /api/v1/auth/sessions/{session_id} — Revoke one session

Your account

Profile, mobile verification, IM handles, password, avatar.

DELETE /api/v1/me — Delete your account
GET /api/v1/me — Profile + gate state
PATCH /api/v1/me — Update your profile
POST /api/v1/me/avatar — Upload an avatar
GET /api/v1/me/im-identities — List IM handles
POST /api/v1/me/im-identities — Add an IM handle
DELETE /api/v1/me/im-identities/{im_id} — Remove an IM handle
GET /api/v1/me/mobile — Your mobile number
PUT /api/v1/me/mobile — Set your mobile number
POST /api/v1/me/mobile/codes — Send a verification code
POST /api/v1/me/mobile/verify — Verify your mobile
PUT /api/v1/me/password — Change password

Home

The whole dashboard in one request.

GET /api/v1/home — Dashboard (single round trip)

Inbox

Read, mark, and delete incoming messages + voicemail.

GET /api/v1/inbox — List messages
GET /api/v1/inbox/unread-count — Unread count
DELETE /api/v1/inbox/{message_id} — Delete a message
PATCH /api/v1/inbox/{message_id} — Mark read / unread

Statuses & feed

Post statuses; read your timeline and your feed.

GET /api/v1/feed — Following feed
GET /api/v1/statuses — Your statuses
POST /api/v1/statuses — Post a status
DELETE /api/v1/statuses/{post_id} — Delete a status
PATCH /api/v1/statuses/{post_id} — Edit a status

Tags

Your *tags, public search, and the follow graph.

GET /api/v1/follows — Tags you follow
GET /api/v1/ktags — Your tags
POST /api/v1/ktags — Create a tag
GET /api/v1/ktags/search — Search public tags
DELETE /api/v1/ktags/{ktag_id} — Delete a tag
GET /api/v1/ktags/{ktag_id} — Tag detail
PATCH /api/v1/ktags/{ktag_id} — Edit a tag
DELETE /api/v1/ktags/{ktag_id}/follow — Unfollow a tag
PUT /api/v1/ktags/{ktag_id}/follow — Follow a tag

Contacts

Your address book.

GET /api/v1/contacts — List contacts
POST /api/v1/contacts — Add a contact
DELETE /api/v1/contacts/{contact_id} — Delete a contact
GET /api/v1/contacts/{contact_id} — Contact detail
PATCH /api/v1/contacts/{contact_id} — Edit a contact

Groups

Contact groups and their members.

GET /api/v1/groups — List groups
POST /api/v1/groups — Create a group
DELETE /api/v1/groups/{group_id} — Delete a group
GET /api/v1/groups/{group_id} — Group detail
PATCH /api/v1/groups/{group_id} — Edit a group
DELETE /api/v1/groups/{group_id}/members/{contact_id} — Remove a member
PUT /api/v1/groups/{group_id}/members/{contact_id} — Add a member

Calls & grid

Live conference calls and the call grid.

POST /api/v1/calls — Start a call
DELETE /api/v1/calls/active — End the call
GET /api/v1/calls/active — Your active call
PATCH /api/v1/calls/active — Set call privacy
POST /api/v1/calls/active/participants — Add a participant
GET /api/v1/grid — Your call grid
DELETE /api/v1/grid/calls — End the grid call
POST /api/v1/grid/calls — Call the whole grid
POST /api/v1/grid/members — Add to the grid
DELETE /api/v1/grid/members/{contact_id} — Remove from the grid

Commands

Run the text-command language; the command reference.

POST /api/v1/commands — Run a command
GET /api/v1/commands/guide — Command reference

Media

Stream uploaded audio and photos.

POST /api/v1/files/{file_id}/stream-token — Refresh a stream URL
GET /api/v1/files/{id}/stream — Stream a file

Calendar

Scheduled events.

GET /api/v1/calendar/events — List events
POST /api/v1/calendar/events — Create an event
DELETE /api/v1/calendar/events/{event_id} — Delete an event
PATCH /api/v1/calendar/events/{event_id} — Edit an event

Widgets

Embeddable widgets for your tags.

GET /api/v1/widgets — List widgets
POST /api/v1/widgets — Create a widget
DELETE /api/v1/widgets/{widget_id} — Delete a widget
PATCH /api/v1/widgets/{widget_id} — Edit a widget
GET /api/v1/widgets/{widget_id}/embed — Embed snippet

Invites

Invite people to Kadoink.

POST /api/v1/invites — Send an invite
DELETE /api/v1/invites/{invite_id} — Revoke an invite
GET /api/v1/me/invites — Your invites

Scheduled messages

List and cancel queued texts and calls.

GET /api/v1/scheduled-jobs — List scheduled messages
DELETE /api/v1/scheduled-jobs/{job_id} — Cancel a scheduled message

Billing

Subscription tier, entitlements, and checkout.

POST /api/v1/billing/checkout — Start Plus checkout
GET /api/v1/billing/entitlements — Plan limits
GET /api/v1/billing/subscription — Your subscription

Public profiles

Public profile + follower data, and abuse reports.

POST /api/v1/abuse-reports — Report abuse
GET /api/v1/ktags/{ktag_id}/followers — A tag's followers
GET /api/v1/profiles/{ktag} — A public profile

Building something with this? Say hi from the contact page.