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

167 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
GET /api/v1/auth/username-available — Username available

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)
GET /api/v1/home/group-chat — Home group chat

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/replies/{reply_id} — Reply delete
DELETE /api/v1/statuses/{post_id} — Delete a status
PATCH /api/v1/statuses/{post_id} — Edit a status
GET /api/v1/statuses/{post_id}/replies — Reply list
POST /api/v1/statuses/{post_id}/replies — Reply create

Tags

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

GET /api/v1/follow-requests — List incoming follow requests
GET /api/v1/follow-requests/count — Follow requests count
GET /api/v1/follow-requests/outgoing — List outgoing follow requests
PUT /api/v1/follow-requests/{request_id} — Act on follow request
GET /api/v1/followers — My followers
DELETE /api/v1/followers/{follower_user_id} — Remove my follower
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
POST /api/v1/ktags/{ktag_id}/media — Ktag add media
DELETE /api/v1/ktags/{ktag_id}/media/{file_id} — Ktag remove media

Contacts

Your address book.

GET /api/v1/contacts — List contacts
POST /api/v1/contacts — Add a contact
POST /api/v1/contacts/import — Import commit
POST /api/v1/contacts/import/preview — Import preview
GET /api/v1/contacts/imports — Imports list
POST /api/v1/contacts/imports/{batch_id}/rollback — Imports rollback
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.

POST /api/v1/group-invites/{invite_id}/accept — Group invite accept
POST /api/v1/group-invites/{invite_id}/decline — Group invite decline
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
GET /api/v1/groups/{group_id}/widgets — Group widgets list

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/bridge-phone — Add bridge phone
POST /api/v1/calls/active/participants — Add a participant
POST /api/v1/calls/{join_code}/call-me — Call me
GET /api/v1/calls/{join_code}/chat — Call chat scrollback
POST /api/v1/calls/{join_code}/chat — Call chat post
POST /api/v1/calls/{join_code}/chat/media — Call chat post media
POST /api/v1/calls/{join_code}/chat/typing — Call chat typing
POST /api/v1/calls/{join_code}/sfu-grant — Sfu grant
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
POST /api/v1/commands/voice — Transcribe command

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
GET /api/v1/recordings — List recordings

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
POST /api/v1/calendar/events/{event_id}/exdates — Calendar event add exdate
DELETE /api/v1/calendar/events/{event_id}/share — Calendar event share revoke
POST /api/v1/calendar/events/{event_id}/share — Calendar event share
DELETE /api/v1/calendar/feed — Calendar feed revoke
GET /api/v1/calendar/feed — Calendar feed get
POST /api/v1/calendar/feed/regenerate — Calendar feed regenerate
POST /api/v1/calendar/sync — Calendar sync
POST /api/v1/calendar/sync/ack — Calendar sync ack

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

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
GET /api/v1/profiles/{ktag}/live — Public profile live

Location sharing

The opt-in live people-map, area browse, and public share links.

GET /api/v1/location/config — Map config (Mapbox token)
GET /api/v1/location/discover — Public accounts near you
GET /api/v1/location/links — Your live share links
POST /api/v1/location/links — Create a live share link
DELETE /api/v1/location/links/{link_id} — Revoke a share link
GET /api/v1/location/people — People on the map
POST /api/v1/location/report — Report your position
GET /api/v1/location/settings — Your sharing settings
PUT /api/v1/location/settings — Update sharing settings

Blocks

GET /api/v1/blocks — List blocks
POST /api/v1/blocks — Create block
DELETE /api/v1/blocks/{blocked_user_id} — Delete block

Call history

GET /api/v1/call-history — Call history
GET /api/v1/call-history/{conference_id}/chat — Call transcript

Comments

GET /api/v1/profiles/{ktag}/comments — List comments
POST /api/v1/profiles/{ktag}/comments — Post comment
DELETE /api/v1/profiles/{ktag}/comments/{comment_id} — Delete comment

Dm

GET /api/v1/dm/threads — Dm threads
POST /api/v1/dm/threads — Dm open
GET /api/v1/dm/threads/{thread_id} — Dm thread get
POST /api/v1/dm/threads/{thread_id}/accept — Dm accept
GET /api/v1/dm/threads/{thread_id}/chat — Dm chat list
POST /api/v1/dm/threads/{thread_id}/chat — Dm chat post
DELETE /api/v1/dm/threads/{thread_id}/chat/{message_id} — Dm chat delete
POST /api/v1/dm/threads/{thread_id}/decline — Dm decline
GET /api/v1/dm/unread-count — Dm unread count

Mini chat

GET /api/v1/groups/{group_id}/chat — Group chat list
POST /api/v1/groups/{group_id}/chat — Group chat post
DELETE /api/v1/groups/{group_id}/chat/{message_id} — Group chat delete
GET /api/v1/widgets/{widget_id}/chat — Widget chat list
POST /api/v1/widgets/{widget_id}/chat — Widget chat post
DELETE /api/v1/widgets/{widget_id}/chat/{message_id} — Widget chat delete

Notifications

GET /api/v1/notifications — Notifications list
POST /api/v1/notifications/read-all — Notifications read all
GET /api/v1/notifications/unread-count — Notifications unread count
DELETE /api/v1/notifications/{note_id} — Notifications delete
PATCH /api/v1/notifications/{note_id} — Notifications update

Push

POST /api/v1/push-token — Register push token

Realtime

POST /api/v1/realtime/grant — Realtime grant

Videomail

POST /api/v1/videomail/{handle} — Videomail send

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