Last updated: October 2025
MyTape is a private social network within the IuVe Project Ecosystem, created by Iurie Verejan and powered by ColibriPlus v2 (Laravel). This document describes the public and partner REST API for integrating web, mobile, and third‑party services with MyTape.
Status: Stable
Audience: First‑party (MyTape web/app), trusted partners, and approved community developers
Standards: REST/JSON over HTTPS, WebSockets (Reverb/Laravel WebSockets), OAuth2/Sanctum
https://api.mytape.live/v1
https://staging-api.mytape.live/v1
All requests must use HTTPS and include required headers.
Authorization: Bearer <token>
— Sanctum Personal Access Token or OAuth2 access tokenAccept: application/vnd.mytape.v1+json
— API versioning via media typeContent-Type: application/json
— for JSON bodies (multipart when uploading files)X-Client-Version: <semver>
— your app/build version (optional but recommended)X-Request-Id: <uuid>
— idempotency/tracing (recommended)Accept: application/vnd.mytape.v1+json
)v2
).X-RateLimit-Limit
, X-RateLimit-Remaining
, Retry-After
.?page=1&per_page=20
(default per_page=20
, max 100
)?cursor=<opaque>&limit=20
meta
and links.next/prev
.200, 201, 204, 400, 401, 403, 404, 409, 422, 429, 500
.POST
, PUT
, PATCH
, DELETE
) send a unique Idempotency-Key
header to safely retry.MyTape supports Laravel Sanctum Personal Access Tokens (PAT) and OAuth2 (Authorization Code + PKCE) for mobile/partner apps.
POST /auth/register
201 Created →
POST /auth/login
200 OK → { "token": "<pat>", "user": { ... } }
GET /auth/me
→ current user profile
POST /auth/logout
→ revoke current token
GET /auth/tokens
· POST /auth/tokens
· DELETE /auth/tokens/{id}
Scopes (examples):
read
— read‑onlywrite
— create/update contentmarket
— Market endpointswork
— Work endpointsadmin:*
— privileged/admin (restricted){ id, username, name, avatar_url, bio, location, website, created_at }
{ id, type(image|video|audio), url, thumb_url, duration, width, height }
{ id, author(User), text, media[], visibility, stats{likes,comments,reposts}, created_at }
{ id, author, post_id, text, created_at }
{ id, kind(like|applause|fire), user_id, post_id }
{ follower_id, followee_id, status }
{ id, title, company, type, location, tags[], description, salary, contact, status }
{ id, title, price, currency, category, media[], location, description, contact }
{ id, name, slug, logo_url, website, category, socials{}, verified }
{ id, type, payload{}, read_at }
GET /feed?cursor=<c>&limit=20
200 OK →
POST /posts
201 Created → { "id": 202, ... }
POST /media
file
(binary), type
=image|video|audio
media.id
to attach to posts.POST /posts/{id}/media
GET /posts/{id}
PATCH /posts/{id}
{ "text": "edited" }
DELETE /posts/{id}
→ 204 No ContentGET /posts/{id}/comments?cursor=...
POST /posts/{id}/comments
{ "text": "great!" }
DELETE /comments/{id}
POST /posts/{id}/reactions
{ "kind": "like" }
DELETE /posts/{id}/reactions/{kind}
POST /users/{id}/follow
DELETE /users/{id}/follow
GET /users/{id}/followers
· GET /users/{id}/following
GET /explore?topic=music&limit=20
GET /users/@{username}
PATCH /me/profile
PATCH /me/privacy
POST /users/{id}/block
POST /reports
{ "entity_type":"post","entity_id":202,"reason":"spam" }
Note: MyTape is not an employer or intermediary. All deals occur directly between users.
GET /work/jobs?query=designer&location=remote&type=contract&tags=ui,figma&page=1&per_page=20
POST /work/jobs
GET /work/jobs/{id}
PATCH /work/jobs/{id}
DELETE /work/jobs/{id}
POST /work/jobs/{id}/apply
Note: MyTape does not process payments; listings are informational with direct contact.
GET /market/listings?category=services&price_min=50&price_max=500&sort=-created_at&page=1
POST /market/listings
GET /market/listings/{id}
PATCH /market/listings/{id}
DELETE /market/listings/{id}
POST /market/listings/{id}/save
DELETE /market/listings/{id}/save
GET /companies?query=audio&category=studio&verified=true&page=1
POST /companies
GET /companies/{id}
PATCH /companies/{id}
(owner/verifier)GET /search?q=deep+house&type=post,user,company,listing&limit=10
200 OK → grouped results by type.
GET /notifications?unread_only=true
POST /notifications/{id}/read
POST /notifications/read-all
Types include: follow
, comment
, mention
, reaction
, job_match
, listing_message
.
Private network: encrypted in transit, stored securely. Optional E2EE roadmap.
GET /dm/threads
POST /dm/threads
{ "user_id": 42 }
GET /dm/threads/{id}/messages?cursor=...
POST /dm/threads/{id}/messages
{ "text": "Hi" , "media_ids": [55] }
Uploads are handled via Laravel filesystem with storage backends (local/object storage/CDN). Videos are transcoded via FFmpeg workers.
POST /media
(multipart) → returns { id, url, type, meta }
GET /media/{id}
DELETE /media/{id}
Webhook (internal): media.transcoded
→ payload: { media_id, status, variants[] }
Powered by Laravel Reverb / WebSockets + Redis.
public.feed
, public.trends
presence.user.{userId}
private.dm.{threadId}
, private.notifications.{userId}
post.created
, comment.created
, reaction.created
dm.message
notification.created
Auth via /broadcasting/auth
with bearer token.
Register at POST /developer/webhooks
with { url, events[] }
.
Events:
user.created
, user.updated
post.created
, post.deleted
comment.created
, comment.deleted
listing.created
, job.created
media.transcoded
Delivery: POST <your-url>
with X-MyTape-Signature: sha256=<hmac>
(shared secret).
Retry: exponential backoff up to 24h.
GET /admin/reports?status=open
POST /admin/actions/ban-user
{ "user_id": 42, "reason": "spam", "duration_days": 7 }
POST /admin/actions/takedown
{ "entity_type":"post","entity_id":202 }
GET /admin/audit-logs?actor=moderator&from=2025-10-01
Access requires admin:*
scope and IP allowlist.
Accept-Language: en, ro;q=0.9, ru;q=0.8
Report vulnerabilities: security@mytape.live
GET /me/export
DELETE /me
@mytape/sdk
/oauth/token
.https://dev.mytape.live
(planned)support@mytape.live
legal@mytape.live
security@mytape.live
© MyTape / IuVe Project Ecosystem — Operated by Reclama Verejan II. All rights reserved.