WisyLink API

Official API reference and integration conventions for WisyLink.

Sections

Official HTTP API for file management and link lifecycle operations.

#API Base URL

  • https://wisylink.com/api

#Authentication

HeaderRequiredFormatNotes
x-api-keyYes (or use Authorization)<api_key>Preferred header for server-to-server requests.
AuthorizationYes (or use x-api-key)Bearer <api_key>Same authorization behavior.

#Request/Response Basics

RuleValue
JSON endpointsContent-Type: application/json
Chunk upload bodyContent-Type: application/octet-stream
Timestamp formatEpoch milliseconds (number)
File id format24-character hex string
Link id format24-character hex string
Shared link path formathttps://wisylink.com/<id>

#File Constraints

RuleValue
Max upload size25 MB (26214400 bytes)
Max chunk size4 MB (4194304 bytes)
Allowed extensionsjpeg/jpg, png, mp3, mp4, pdf, xlsx, docx, csv, txt, json, html
Empty uploadsRejected

#Endpoints

#Files

#Create File

POST/files

Starts a new file upload session and returns the file id to use in chunk uploads.

Request:

FieldWhereTypeRequiredRules
nameJSON bodystringNoOriginal file name hint. Extension is replaced with detected real extension before persistence.

Request example:

Request example
curl -X POST "https://wisylink.com/api/files" \
  -H "x-api-key: <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-original-video.mov"
  }'
bash

Response (201):

FieldTypeDescription
idstringFile identifier (24-char hex).
created_atnumberEpoch milliseconds.
Examplejson
{
  "id": "67e6f6e6c5a91e4d2d9b0a11",
  "created_at": 1762432496000
}

#Upload File

POST/files/chunks

Uploads raw file chunks to an existing file id. Each request accepts at most 4 MB.

Request:

FieldWhereTypeRequiredRules
idQuerystringYesFile id from Create File.
lastQuerybooleanNoDefaults to false. Set true for the final chunk.
(body)Raw bodybinaryYesapplication/octet-stream, max 4194304 bytes.

Request example:

Request example
curl -X POST "https://wisylink.com/api/files/chunks?id=<file_id>&last=true" \
  -H "x-api-key: <api_key>" \
  -H "Content-Type: application/octet-stream" \
  --data-binary "@./chunk-last.bin"
bash

Response (200):

FieldTypeDescription
idstringFile identifier.
okbooleantrue when chunk write is accepted.
Examplejson
{
  "id": "67e6f6e6c5a91e4d2d9b0a11",
  "ok": true
}

Notes:

  • Upload sessions expire automatically if not completed within 15 minutes.
  • The final chunk must be sent with last=true; that call finalizes and processes the file.

#Get File

GET/files/:id

Returns metadata for a single uploaded file by id.

Request:

FieldWhereTypeRequiredRules
idPathstringYesMust be a valid id (24-char hex).

Request example:

Request example
curl "https://wisylink.com/api/files/67e6f6e6c5a91e4d2d9b0a11" \
  -H "x-api-key: <api_key>"
bash

Response (200):

FieldTypeDescription
idstringFile identifier (24-char hex).
content_typestringMIME content type.
namestringPersisted display file name (original base name + detected extension).
sizenumberByte size.
created_atnumberEpoch milliseconds.
updated_atnumberEpoch milliseconds.
Examplejson
{
  "id": "67e6f6e6c5a91e4d2d9b0a11",
  "content_type": "video/mp4",
  "name": "my-original-video.mp4",
  "size": 128934,
  "created_at": 1762432496000,
  "updated_at": 1762432496000
}

#Delete File

DELETE/files/:id

Permanently removes a single uploaded file and its stored object. References to this file id in any link file_ids are removed automatically.

Request:

FieldWhereTypeRequiredRules
idPathstringYesMust be a valid id (24-char hex).

Request example:

Request example
curl -X DELETE "https://wisylink.com/api/files/67e6f6e6c5a91e4d2d9b0a11" \
  -H "x-api-key: <api_key>"
bash

Response (200):

Examplejson
{ "ok": true }
POST/links

Creates a single link with generation input and optional attached files.

Request:

FieldWhereTypeRequiredRules
typeJSON bodystringYesAllowed: image, audio, video, pdf, page.
promptJSON bodystringYesMin 1, max 1000 characters.
hostedJSON bodybooleanNoDefaults to false when omitted.
privateJSON bodybooleanNoDefaults to false when omitted.
file_ids[]JSON bodystring[]NoMax 10, each item must be 24-char hex, deduplicated, and owned by same API key owner.

Notes:

  • file_ids references uploaded files. Use Create File and Upload File first, then pass the returned file id values (id field).
  • private: true adds stricter crawler-discovery blocking intent for the link surface.
  • shared_url is generated from the apex domain + link id (extensionless path).
  • New links are created with status: pending internally.

Request example:

Request example
curl -X POST "https://wisylink.com/api/links" \
  -H "x-api-key: <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "video",
    "prompt": "Create a short product trailer with energetic pacing.",
    "hosted": true,
    "file_ids": ["67e6f6e6c5a91e4d2d9b0a11", "67e6f6e6c5a91e4d2d9b0a22"]
  }'
bash

Response (201):

FieldTypeDescription
idstringLink identifier.
shared_urlstringPublic shared URL derived from extensionless link id path.
statusstringpending, generating, completed.
created_atnumberEpoch milliseconds.
updated_atnumberEpoch milliseconds.
Examplejson
{
  "id": "67e6f6e6c5a91e4d2d9b0a77",
  "shared_url": "https://wisylink.com/67e6f6e6c5a91e4d2d9b0a77",
  "status": "pending",
  "created_at": 1762432496000,
  "updated_at": 1762432496000
}
GET/links/:id

Returns a single link by id with current status and shared URL.

Request:

FieldWhereTypeRequiredRules
idPathstringYesLink id (24-char hex).

Notes:

  • meta is present in the response only when status is completed.
  • meta.duration (seconds) is included only when type is audio or video.

Request example:

Request example
curl "https://wisylink.com/api/links/67e6f6e6c5a91e4d2d9b0a77" \
  -H "x-api-key: <api_key>"
bash

Response (200):

FieldTypeDescription
idstringLink identifier.
typestringLink type.
promptstringPrompt payload.
hostedbooleanHosted state.
privatebooleanPrivate crawler-discovery block flag.
statusstringpending, generating, completed.
metaobjecttitle, description, cover, duration.
outputsstring[]Generated output paths/URLs.
file_idsstring[]Attached file ids.
created_atnumberEpoch milliseconds.
updated_atnumberEpoch milliseconds.
shared_urlstringPublic shared URL.
Examplejson
{
  "id": "67e6f6e6c5a91e4d2d9b0a77",
  "type": "video",
  "prompt": "Create a short product trailer with energetic pacing.",
  "hosted": true,
  "status": "completed",
  "meta": {
    "title": "Product Trailer — Energetic Pacing",
    "description": "A punchy 10-second trailer showcasing the product with energetic cuts and momentum.",
    "cover": "cover.jpg",
    "duration": 10
  },
  "outputs": ["output-1.mp4"],
  "file_ids": ["67e6f6e6c5a91e4d2d9b0a11"],
  "created_at": 1762432496000,
  "updated_at": 1762432596000,
  "shared_url": "https://wisylink.com/67e6f6e6c5a91e4d2d9b0a77"
}
PATCH/links/:id

Updates a single existing link by id using mutable fields (prompt, hosted, private, file_ids).

Request:

FieldWhereTypeRequiredRules
idPathstringYesLink id (24-char hex).
promptJSON bodystringNoMin 1, max 1000.
hostedJSON bodybooleanNoHosted flag.
privateJSON bodybooleanNoPrivate crawler-discovery block flag.
file_ids[]JSON bodystring[]NoSame file id constraints as create.

Rules:

  • At least one updatable field must be present in request body.
  • If file_ids is provided, it fully replaces the existing attachment list.
  • To keep older file ids, include them again in the same update request.
  • File ids removed from the list are deleted with their related asset records.
  • If prompt changes, regeneration is auto-queued and update credit is consumed. Changes to file_ids, hosted, or private alone do not trigger regeneration.
  • Hosted links cost 1 credit/day; hosted + private links cost 2 credits/day.

Request example:

Request example
curl -X PATCH "https://wisylink.com/api/links/67e6f6e6c5a91e4d2d9b0a77" \
  -H "x-api-key: <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Create a 20-second trailer, emphasize motion graphics.",
    "file_ids": ["67e6f6e6c5a91e4d2d9b0a22"],
    "hosted": true
  }'
bash

Response (200):

Same fields as Get Link response.

Examplejson
{
  "id": "67e6f6e6c5a91e4d2d9b0a77",
  "type": "video",
  "prompt": "Create a 20-second trailer, emphasize motion graphics.",
  "hosted": true,
  "status": "pending",
  "outputs": ["output-1.mp4"],
  "file_ids": ["67e6f6e6c5a91e4d2d9b0a22"],
  "created_at": 1762432496000,
  "updated_at": 1762432696000,
  "shared_url": "https://wisylink.com/67e6f6e6c5a91e4d2d9b0a77"
}
DELETE/links/:id

Permanently removes a single link by id. Files listed in the link file_ids are deleted together (file record + stored object).

Request:

FieldWhereTypeRequiredRules
idPathstringYesLink id (24-char hex).

Request example:

Request example
curl -X DELETE "https://wisylink.com/api/links/67e6f6e6c5a91e4d2d9b0a77" \
  -H "x-api-key: <api_key>"
bash

Response (200):

Examplejson
{ "ok": true }

#Errors

#Unauthorized

401unauthorized

Returned when API key is missing or invalid.

Examplejson
{
  "error": "unauthorized",
  "message": "Missing or invalid API key. Provide `x-api-key` or `Authorization: Bearer <key>`."
}

#Credit Limit Exceeded

429credit_limit_exceeded

Returned when API key usage exceeds credit limit for the active period.

Examplejson
{
  "error": "credit_limit_exceeded",
  "message": "API key credit limit is exceeded for the current period.",
  "limit": 100,
  "used": 100,
  "remaining": 0,
  "period": "day",
  "resets_at": 1762473600000
}

#Bad Request

400bad_request

Returned for invalid request shape, invalid types, invalid formats, or missing required values.

#Not Found

404not_found

Returned when target file or link does not exist for the authenticated owner.