Morffeus Docs
ENSR morffeus.com

Biblioteka medija

Biblioteka medija čuva slike, video snimke i dokumente vaše aplikacije, svaki na javnom URL-u. Proizvodi, varijante, prodajne lokacije i stranice upućuju na te URL-ove. Ovim endpointima nalazite fajlove, držite ih uređenim, menjate fajl novom verzijom a da mesta koja ga koriste ne prestanu da rade, i raščišćavate.

Kako biblioteka radi#

Objekat fajla#

Ono što endpointi za liste vraćaju za svaki fajl.

PoljeOpis
idintegerNaš id fajla.
filenamestringNaziv koji se prikazuje u biblioteci.
keystringPutanja fajla u vašem skladištu. Pozivi za brisanje primaju nju.
urlstringJavni URL. Posle zamene završava se sa ?v= i brojem verzije.
folderstring · može biti nullKljuč foldera, ili null za najviši nivo.
sizeintegerVeličina u bajtovima.
mime, width, heightmože biti nullVrsta i veličina u pikselima, posle obrade.
alt, captionstring · može biti nullAlternativni tekst i opis za prodavnicu.
tagsniz stringovaVaše oznake.
descriptionstring · može biti nullSlobodan tekst dat pri otpremanju.
versioninteger1, i po jedan više za svaku zamenu.
renditionsniz objekataManje kopije: label, width, height, size, key, url.
usage_countintegerNa koliko mesta se fajl koristi.
hidden, hidden_by, hidden_at, hidden_noteDa li je fajl skriven, i ko ga je sakrio, kada i zašto.
sourcestring · može biti nullOdakle fajl potiče, na primer admin ili app.
last_modified, inserted_atdatetime · ISO 8601, UTCKad je fajl poslednji put upisan i kad je dodat. Šalje se bez pomaka.

Pregled fajlova#

GET /api/v2/cdn/files

Fajlovi vaše biblioteke, stranicu po stranicu, sa filterima za raščišćavanja koja najčešće radite: fajlovi koji se ne koriste, slike bez alternativnog teksta, veliki fajlovi.

Parametri upita

ParametarOpis
folderstringSamo fajlovi direktno u ovom folderu, po njegovom ključu. / je najviši nivo. Izostavite ga za sve fajlove.
searchstringPoredi se sa nazivom, alternativnim tekstom, opisom i oznakama.
kindstringimage, vector, video, audio ili doc.
unusedbooleanSamo fajlovi koje ništa ne koristi i koji su stariji od praga aplikacije za nekorišćene fajlove.
noaltbooleanSamo slike bez alternativnog teksta.
min_sizeintegerSamo fajlovi od najmanje ovoliko bajtova.
since_daysintegerSamo fajlovi upisani u poslednjih toliko dana.
hidden, hidden_onlybooleanUključi skrivene fajlove, ili prikaži samo njih.
orderBystring · podrazumevano name ascname, size, inserted_at ili last_modified, iza čega ide asc ili desc.
pageNointeger · podrazumevano 1Stranica, od 1.
pageSizeinteger · podrazumevano 30Fajlova po stranici.

Vraća

data.files: stranicu objekata fajlova. data.total_count: koliko fajlova odgovara. data.hidden_count: koliko ih je skriveno. Za razliku od većine lista, ova vam kaže ukupan broj.

Dva srodna čitanja: GET /cdn/folders vraća stablo foldera, svaki sa id, name, key, parent_cdn_folder_path, file_count, total_file_count (sa podfolderima) i svojim folders; pošaljite folder da biste počeli ispod jednog. GET /cdn/files/summary vraća broj fajlova po vrsti i zauzeto skladište, u bajtovima.

GET/cdn/files
curl -G "https://api.morffeus.com/api/v2/cdn/files" \
  -H "Authorization: Bearer $MORFFEUS_TOKEN" \
  -d "folder=products" -d "kind=image" \
  -d "noalt=true" -d "pageSize=50"
Odgovor200 OK
{
  "data": {
    "files": [
      {
        "id": 7731,
        "filename": "dog-food.jpg",
        "key": "12-34/products/dog-food.jpg",
        "url": "https://cdn.example.com/12-34/products/dog-food.jpg",
        "folder": "products",
        "size": 84210,
        "mime": "image/webp",
        "width": 1600,
        "height": 1600,
        "alt": null,
        "tags": [],
        "version": 1,
        "usage_count": 2,
        "hidden": false,
        "renditions": [
          {
            "label": "w800",
            "width": 800,
            "height": 800,
            "url": "https://cdn.example.com/12-34/products/[email protected]",
            …
          }
        ],
        …
      }
    ],
    "total_count": 138,
    "hidden_count": 0
  }
}

Izmena, premeštanje i slaganje#

PATCH /api/v2/cdn/file

Menja tekstove i vidljivost fajla. Nijedan od ovih poziva ne menja ključ ni URL fajla.

PozivOpis
PATCH /cdn/fileTelo: id (obavezno) i bilo šta od alt, caption, tags (lista, ili string odvojen zarezima), name (prikazani naziv, koji mora biti slobodan u svom folderu), hidden i hidden_note. hidden: false ostavlja fajl vidljivim od tada. Vraća fajl, bez url.
PATCH /cdn/files/moveTelo: ids, lista id-jeva fajlova, i folder, ključ ciljnog foldera ("" ili / za najviši nivo). Folderi koji ne postoje se prave. Vraća po jedan rezultat za svaki id, sa success i message.
POST /cdn_foldersPravi folder iz {"cdn_folder": {…}} sa name i key (oba obavezna), parent_cdn_folder_path, description. Vraća 201.
PATCH /cdn/folderPreimenuje ili premešta folder. Telo: id (obavezno), name, parent_folder (ključ novog roditelja, "" za najviši nivo), description. Fajlovi u njemu se premeštaju sa njim.

Greške

StatusKada
404U vašoj aplikaciji nema takvog fajla ili foldera: API.CdnFiles.FileNotFound, API.CdnFolders.FolderNotFound.
422Naziv ili ključ je zauzet: API.CdnFiles.KeyAlreadyExists, API.CdnFolders.KeyAlreadyExists. Novi roditelj ne postoji ili je unutar foldera: API.CdnFolders.ParentNotFound, API.CdnFolders.InvalidParent.
PATCH/cdn/file
curl -X PATCH "https://api.morffeus.com/api/v2/cdn/file" \
  -H "Authorization: Bearer $MORFFEUS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": 7731,
    "alt": "Dog food, 2 kg bag",
    "tags": ["dog", "food"]
  }'
Greška404 Not Found
{
  "errors": {
    "CdnFiles": ["API.CdnFiles.FileNotFound"]
  }
}

Zamena fajla#

POST /api/v2/cdn/files/{id}/replace

Stavlja novi sadržaj pod isti ključ, pa svaki proizvod i stranica koji koriste fajl prikazuju novu verziju. Prethodni sadržaj se čuva kao verzija na koju možete da se vratite. Alternativni tekst, opis, oznake i vidljivost fajla ostaju kakvi jesu, a manje kopije se prave ponovo.

Parametri tela zahteva, kao multipart form data

ParametarOpis
fileobaveznofileNovi sadržaj.
cache_strategyobaveznostringKako pregledači i CDN dobijaju novu verziju. version: URL koji vratimo završava se sa ?v= i verzijom; koristite ga gde prikazujete fajl. purge: brišemo kopije fajla i njegovih manjih kopija na CDN-u, a cache.purged kaže da li je uspelo; neka podešavanja to ne podržavaju. ttl: ništa se ne briše, a keševi preuzimaju izmenu kad im kopija istekne.

Vraća

data: fajl, sa novom version. cache: strategy, url koji treba koristiti, i purged za strategiju purge.

Srodan pozivOpis
POST /cdn/files/{id}/revertVraća se na sačuvanu verziju. Telo: cache_strategy (obavezno) i version (podrazumevano: poslednja sačuvana). Sačuvane verzije ističu po rasporedu korpe.
POST /cdn/files/{id}/renditions/regeneratePonovo pravi manje kopije fajla, po želji sa novim širinama u renditions, na primer [1600, 800, 400]. Vraća 202: posao teče u pozadini.

Greške

StatusKada
400Nema fajla (API.CdnFiles.FileRequired), nepoznata strategija (API.CdnFiles.UnknownCacheStrategy), purge gde nije dostupan (API.CdnFiles.PurgeNotConfigured), ili fajl u korpi (API.CdnFiles.FileInTrash).
404U vašoj aplikaciji nema takvog fajla, ili nema verzije na koju bi se vratili (API.CdnFiles.NoVersionToRevert).
POST/cdn/files/{id}/replace
curl -X POST "https://api.morffeus.com/api/v2/cdn/files/7731/replace" \
  -H "Authorization: Bearer $MORFFEUS_TOKEN" \
  -F "file=@dog-food_new.jpg" \
  -F "cache_strategy=version"
Odgovor200 OK
{
  "data": {
    "id": 7731,
    "key": "12-34/products/dog-food.jpg",
    "version": 2,
    …
  },
  "cache": {
    "strategy": "version",
    "url": "https://cdn.example.com/12-34/products/dog-food.jpg?v=2"
  }
}

Gde se fajl koristi#

GET /api/v2/cdn/files/{id}/usages

Svako mesto koje čuva URL fajla. Proverite ga pre nego što fajl zamenite ili obrišete.

Parametri upita

ParametarOpis
offset, limitinteger · podrazumevano 0, 30Stranice.

Vraća

data: po jedan unos za svaku upotrebu, sa entity_type i entity_id (na primer product i njegov id), field (kao images ili image_url), label (čitljiv naziv), url kako je sačuvan, i total_count, brojem upotreba. Fajl koji nije u vašoj aplikaciji vraća praznu listu.

GET /cdn/usages/broken daje suprotno: sačuvane URL-ove koji upućuju na fajl koji biblioteka više nema, sa istim poljima i parametrom search. Fajlovi u korpi se ne računaju kao pokvareni.

Odgovor200 OK
{
  "data": [
    {
      "entity_type": "product",
      "entity_id": 48377,
      "field": "images",
      "label": "Dog food",
      "url": "https://cdn.example.com/12-34/products/dog-food.jpg",
      "total_count": 2
    },
    {
      "entity_type": "product_variant",
      "entity_id": 91120,
      "field": "image_url",
      …
    }
  ]
}

Brisanje, vraćanje i trajno brisanje#

DELETE /api/v2/cdn

Premešta fajl u korpu. Njegov URL radi dok se fajl trajno ne obriše, pa ništa ne prestaje da radi odmah. Pozivi za brisanje primaju key fajla; vraćanje i trajno brisanje primaju njegov id. Ulaze DELETE poziva šaljite u upitu: neki HTTP klijenti odbacuju telo DELETE zahteva.

PozivOpis
DELETE /cdn?file=Jedan fajl u korpu, po njegovom key. Fajl koji je već u korpi takođe vraća 200, a njegovo vreme u korpi se ne resetuje.
DELETE /cdn/listViše fajlova: files, lista {"key": …}. Vraća po jedan rezultat za svaki fajl, sa success i message.
DELETE /cdn/folder?folder=Folder po ključu: svaki fajl u njemu i njegovim podfolderima ide u korpu, a folderi se uklanjaju. Vraća deleted_files i deleted_folders.
GET /cdn/trashFajlovi u korpi, svaki sa deleted_at, deleted_by i purge_at, i total_count. Parametri: search, page_no, page_size (podrazumevano 30), order_by (podrazumevano deleted_at desc). Obratite pažnju na donje crte, za razliku od GET /cdn/files.
POST /cdn/files/{id}/restoreVraća jedan fajl iz korpe, u njegov folder. POST /cdn/files/restore sa ids vraća više njih.
DELETE /cdn/files/{id}/purgeTrajno uklanja fajl iz korpe, sa manjim kopijama i sačuvanim verzijama. DELETE /cdn/files/purge sa ids uklanja više njih. Stranice koje još koriste URL tada se pojavljuju u GET /cdn/usages/broken.

Vaša aplikacija može biti podešena da odbija brisanje fajlova koji se koriste; brisanje tada ne prolazi sa API.CdnFiles.FileReferenced.

Greške

StatusKada
400Trajno brisanje fajla koji nije u korpi: API.CdnFiles.FileNotInTrash. Brisanje fajla koji se koristi, kad ga vaša aplikacija odbija: API.CdnFiles.FileReferenced.
404U vašoj aplikaciji nema takvog fajla: API.CdnFiles.FileNotFound.
422DELETE /cdn/folder bez foldera: API.CdnFolders.FolderRequired.
DELETE/cdn
curl -X DELETE -G "https://api.morffeus.com/api/v2/cdn" \
  -H "Authorization: Bearer $MORFFEUS_TOKEN" \
  --data-urlencode "file=12-34/products/dog_food_old.jpg"
Odgovor200 OK
{
  "data": { "message": "File deleted", "success": true }
}
Greška400 Bad Request
{
  "errors": {
    "CdnFiles": ["API.CdnFiles.FileNotInTrash"]
  }
}

Slike na proizvodima i lokacijama#

Proizvodi, varijante i prodajne lokacije čuvaju URL-ove slika. Da biste koristili fajl iz biblioteke, pošaljite njegov url kao image_url u images proizvoda ili varijante preko POST /int/products. URL čuvamo onako kako ga pošaljete i ne preuzimamo ga, pa radi i URL van biblioteke, ali se ne prati. URL iz biblioteke se odmah računa kao upotreba fajla.

Ovde pomažu još dva čitanja. GET /cdn_upload_presets daje pravila otpremanja vaše aplikacije, sa izlaznim formatom, najvećom širinom, kvalitetom i širinama manjih kopija koje svako primenjuje; podrazumevano ima is_default: true. GET /cdn/files/pdf-renders?name= nalazi PDF-ove čije su stranice pretvorene u slike, sa URL-om svake stranice.

Poslednja izmena 1. oktobra 2026. · API v2 Nešto nije u redu na ovoj stranici?