Atributi proizvoda
Atributi opisuju i grupišu vaše proizvode: boju, veličinu, brend, kategoriju. Svaki je definicija atributa, čvor u stablu kao što je Boja › Crvena. Proizvod je povezan sa definicijama koje ga opisuju, a prodavnica po tim vezama filtrira i grupiše proizvode.
Definicije i veze#
- Definicija ima naziv i, po želji, roditelja. Definicija bez roditelja je koren, kao Boja. Njena deca su vrednosti, kao Crvena i Plava. Stablo može biti duboko koliko vam treba.
- Veza spaja jedan proizvod sa jednom definicijom. Proizvod povežite sa vrednošću, Crvena, a ne sa korenom.
- Veze pripadaju proizvodu, ne varijanti. Kad navedete varijantu, povezujemo njen proizvod. Za vrednosti koje se razlikuju po varijanti, kao veličina svake varijante, koristite detalje proizvoda; pogledajte Proizvode.
Kako se atributi uparuju#
U PUT /int/product_attributes proizvod i definicije navodite na svoj način, a mi ih pronalazimo:
- Proizvod: preko jedne od njegovih varijanti, prvo po
code, pa pobarcode, pa poexternal_ref. Koristimo prvi koji pronađe varijantu, pa povezujemo njen proizvod. - Definicija: po
external_ref, vašem sopstvenom id-ju za nju. Kad pošaljete iproduct_attribute_def_id, definicija mora da ima oba. Definicija koju nađemo menja se poljima koja pošaljete. Ona koju ne nađemo se pravi. - Roditelj: po
parent_external_ref. Roditelj koji ne nađemo pravi se sa nazivom izparent_attribute_def_name.
Uz svaki atribut pošaljite external_ref, a uz svaku vrednost parent_external_ref. Atribut bez external_ref ili product_attribute_def_id pravi novu definiciju pri svakom pozivu. Vrednost poslata bez parent_external_ref gubi roditelja.
Objekat definicije atributa#
Ono što vraćaju endpointi za definicije.
| Polje | Opis |
|---|---|
| idinteger | Naš id definicije. |
| namestring | Naziv koji kupci vide, na primer Crvena. |
| external_refstring · može biti null | Vaš sopstveni id definicije. Jedinstven u vašoj aplikaciji. |
| codestring · može biti null | Šifra koju birate, jedinstvena u vašoj aplikaciji. Definiciju po njoj nalazite preko GET /product_attribute_defs?code=. |
| slugstring · može biti null | Naziv u URL-u koji prodavnica koristi, jedinstven u vašoj aplikaciji. |
| parent_product_attribute_def_idinteger · može biti null | Naš id roditelja. null za koren. |
| description, image_urlstring · može biti null | Tekst i slika za prodavnicu. |
| defaultboolean · podrazumevano false | Označava podrazumevanu definiciju aplikacije. Samo jedna može biti podrazumevana: kad je postavite na jednoj, briše se sa ostalih. |
| is_rollup_pivotboolean · podrazumevano false | Omogućava preporukama da grupišu proizvode na ovoj definiciji. |
| last_phoebe_syncdatetime · može biti null | Interno. Zanemarite ga. |
| app_idinteger | Vaša aplikacija. |
| inserted_at, updated_atdatetime · ISO 8601, UTC | Kad je definicija napravljena i poslednji put izmenjena. Šalje se bez pomaka. |
Povezivanje atributa sa proizvodima#
Za svaki proizvod koji navedete pravi ili menja definicije koje pošaljete i povezuje ih sa proizvodom. Veze koje ne pošaljete ostaju kakve jesu, pa možete da šaljete samo ono što se promenilo. Da biste uklonili vezu, pošaljite atribut sa delete: true.
Poziv prolazi ceo ili nikako. Ako jedan proizvod ne može da se nađe, ili jedna definicija nije ispravna, ništa se ne upisuje, a odgovor navodi prvu grešku.
Parametri tela zahteva
| Parametar | Opis |
|---|---|
| product_attributesobaveznoniz objekata | Jedan unos po proizvodu. |
| product_attributes[].codejedno odstring | Šifra jedne od varijanti proizvoda. |
| product_attributes[].barcodejedno odstring | Barkod jedne od njegovih varijanti. |
| product_attributes[].external_refjedno odstring | Vaš sopstveni id jedne od njegovih varijanti. |
| product_attributes[].attributesniz objekata | Definicije koje se povezuju ili razvezuju. |
| attributes[].external_refstring | Vaš id definicije. Pogledajte Kako se atributi uparuju. |
| attributes[].product_attribute_def_idinteger | Naš id definicije, kad ga imate. |
| attributes[].namestring | Obavezno kad je definicija nova. |
| attributes[].code, attributes[].slug, attributes[].description, attributes[].image_urlstring | Upisuju se u definiciju. Pogledajte objekat. |
| attributes[].parent_external_refstring | Vaš id roditelja, na primer Boje kad šaljete Crvenu. |
| attributes[].parent_attribute_def_namestring | Naziv roditelja, koristi se kad roditelja pravimo. |
| attributes[].deleteboolean | true uklanja vezu. Šaljite ga samo za vezu koja postoji: za definiciju koja nije povezana, poziv je povezuje. Sama definicija ostaje u oba slučaja. |
Vraća
data: jedan unos po atributu koji ste poslali, za sve proizvode zajedno, svaki sa id, product_id, product_attribute_def_id, inserted_at i updated_at veze. Uklonjena veza se vraća kakva je bila.
Uklanjanje veze menja proizvod u GET /products ubrzo posle poziva. Nova veza se tamo vidi posle sledećeg osvežavanja proizvoda, najkasnije noćnog.
Greške
| Status | Kada |
|---|---|
| 400 | Telo zahteva nema ključ product_attributes. |
| 401 | Token nedostaje ili je opozvan. Pogledajte Autentifikaciju. |
| 422 | Nijedna varijanta ne odgovara unosu: product variant not found. Nova definicija nema naziv: API.ProductAttributeDefs.NameCantBeBlank. external_ref, code ili slug je zauzet drugom definicijom: API.ProductAttributeDefs.ExternalRefAlreadyExists, CodeAlreadyExists, SlugAlreadyExists. |
curl -X PUT "https://api.morffeus.com/api/v2/int/product_attributes" \ -H "Authorization: Bearer $MORFFEUS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "product_attributes": [ { "code": "SKU-1001", "attributes": [ { "external_ref": "COLOR-RED", "name": "Red", "parent_external_ref": "COLOR", "parent_attribute_def_name": "Colour" }, { "external_ref": "SALE", "name": "Sale", "delete": true } ] } ] }'
const res = await fetch('https://api.morffeus.com/api/v2/int/product_attributes', { method: 'PUT', headers: { Authorization: `Bearer ${process.env.MORFFEUS_TOKEN}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ product_attributes: [{ code: 'SKU-1001', attributes: [ { external_ref: 'COLOR-RED', name: 'Red', parent_external_ref: 'COLOR', parent_attribute_def_name: 'Colour' }, { external_ref: 'SALE', name: 'Sale', delete: true }, ], }], }), }); if (!res.ok) throw new Error(JSON.stringify(await res.json()));
{
"data": [
{
"id": 88410,
"product_id": 48377,
"product_attribute_def_id": 512,
"inserted_at": "2026-10-01T08:40:11",
"updated_at": "2026-10-01T08:40:11"
},
{
"id": 80002,
"product_id": 48377,
"product_attribute_def_id": 97,
…
}
]
}
{
"errors": {
"message": ["product variant not found"]
}
}
Čitanje definicija#
Definicije vaše aplikacije u jednom od tri oblika. Lista nije podeljena na stranice: vraća se svaka definicija.
| Oblik | Opis |
|---|---|
| ?code= | Definicija sa ovom šifrom, kao lista od jedne, ili prazna lista. Ima prednost nad ostalim parametrima. |
| ?tree=true | Celo stablo: koreni poređani po nazivu, svaki sa svojom decom u children. Čvorovi nose id, name, external_ref, slug, description, image_url, default, parent_product_attribute_def_id i children. |
| bez ovih | Ravna lista objekata definicija, svaki sa nazivom roditelja u parent_name. |
Parametri upita ravne liste
| Parametar | Opis |
|---|---|
| slugstring | Samo definicija sa ovim slugom. |
| onlyParentsoznaka | Samo koreni. Uključuje ga bilo koja vrednost, i false, pa ga izostavite da biste ga isključili. |
| numberOfProductsoznaka | Dodaje products_count: veze definicije i svih definicija ispod nje. Uključuje ga bilo koja vrednost. |
curl "https://api.morffeus.com/api/v2/product_attribute_defs?tree=true" \ -H "Authorization: Bearer $MORFFEUS_TOKEN"
{
"data": [
{
"id": 96,
"name": "Colour",
"external_ref": "COLOR",
"slug": "colour",
"description": null,
"image_url": null,
"default": false,
"parent_product_attribute_def_id": null,
"children": [
{
"id": 512,
"name": "Red",
"external_ref": "COLOR-RED",
"parent_product_attribute_def_id": 96,
"children": [],
…
}
]
}
]
}
Jedna po jedna definicija#
Iste definicije po našem id-ju, bez povezivanja sa proizvodom.
| Poziv | Opis |
|---|---|
| GET /product_attribute_defs/{id} | Jedan objekat definicije u data. |
| POST /product_attribute_defs | Pravi jednu definiciju iz {"product_attribute_def": {…}}, sa poljima iz objekta; name je obavezan, a vrednost navodi roditelja u parent_product_attribute_def_id. Vraća 201 i novu definiciju. |
| DELETE /product_attribute_defs/{id} | Briše definiciju i vraća 204 bez tela. Definicija koja još ima veze ili decu ne može da se obriše: prvo je razvežite i premestite ili obrišite njenu decu. |
Greške
| Status | Kada |
|---|---|
| 400 | Id nije broj, ili telo zahteva nema ključ product_attribute_def. |
| 404 | U vašoj aplikaciji nema definicije sa ovim id-jem. Telo je prazno. |
| 422 | Polje nedostaje ili nije ispravno, na primer {"errors": {"name": ["can't be blank"]}}, ili roditelj ne postoji. Zauzet external_ref, code ili slug prijavljuje se pod app_id. |
curl -X POST "https://api.morffeus.com/api/v2/product_attribute_defs" \ -H "Authorization: Bearer $MORFFEUS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "product_attribute_def": { "name": "Blue", "external_ref": "COLOR-BLUE", "parent_product_attribute_def_id": 96 } }'
{
"errors": {
"app_id": ["API.ProductAttributeDefs.ExternalRefAlreadyExists"]
}
}
Povezano#
- Proizvodi: proizvodi, varijante i njihovi detalji; atributi mogu da se pošalju i uz proizvod.
- Vodič: Sinhronizacija kataloga iz ERP-a: redosled koji radi, atributi prvi.
- Identifikatori i uparivanje: šifre, id-jevi i vaše sopstvene reference kroz ceo API.