Morffeus Docs
ENSR morffeus.com

Porudžbine

Porudžbine stižu iz vaše prodavnice, vaših radnji i ostalih prodajnih kanala. Ovim endpointima ih čitate u ERP ili sistem za isporuku, vodite ih kroz statuse i otkazujete ih.

Id-jevi porudžbina#

Porudžbinu imenuju tri broja: id, data_part i time_part. Svaka porudžbina u odgovoru nosi sva tri. Čuvajte ih zajedno: PUT i DELETE /orders/{id} uz id traže dataPart i timePart. Pogledajte Identifikatore i uparivanje.

Statusi#

Porudžbina ima tri statusa, svaki iz svoje liste:

PoljeŠta prati
order_status_idSamu porudžbinu: Saved, External Processing, Finalized, Canceled, Expired, i stanja greške Failed, Errored, Tax Report Error i druga. Iz GET /order_statuses.
payment_status_idPlaćanje: Pending, Reserved, Captured, Refunded, Cancelled i još. Iz GET /payment_statuses.
delivery_status_idIsporuku: Pending, Picked, Packed, Shipped, In Transit, Delivered i još. Iz GET /delivery_statuses.

Svaki unos liste ima id, name, color i final, koji kaže da li status završava put porudžbine. Liste su iste za svaku aplikaciju, ali im se id-jevi mogu razlikovati između okruženja, pa ih pročitajte i uparujte po nazivu umesto da id-jeve upisujete u kod.

Promena statusa, preko PUT /orders/{id} ili grupne izmene, pokreće ono što je vaša aplikacija u Admin-u podesila za tu promenu, na primer poruku kupcu. Postavljanje statusa porudžbine na Finalized računa se i kao završetak porudžbine.

Porudžbina u listama#

Ono što GET /orders vraća za svaku porudžbinu. Iznosi su ovde formatiran tekst u valuti porudžbine, na primer "1.290,00", spremni za prikaz; GET /orders/{id} ih vraća kao brojeve.

PoljeOpis
id, data_part, time_partintegerId porudžbine.
order_numberstringNaš broj porudžbine, jedinstven u vašoj aplikaciji.
invoice_number, external_refstring · može biti nullBroj računa, i vaša sopstvena referenca porudžbine kad je stigla iz vašeg sistema.
order_datedatetime · ISO 8601, UTCKad je porudžbina napravljena. Šalje se bez pomaka.
customer_id, first_name, last_name, emailmože biti nullKupac, kad ga ima.
app_location_idintegerProdajna lokacija kojoj porudžbina pripada.
sales_channel_id, sales_channelProdajni kanal, po id-ju i nazivu.
order_status, payment_status, delivery_statusobjectSvaki kao {id, name, color, final}. Pogledajte Statuse.
canceledbooleanDa li je porudžbina otkazana.
sales, discount, net_sales, vat, end_salesstringBruto iznos, popust, neto, PDV i iznos za plaćanje, u valuti porudžbine.
paid, debtstringŠta je plaćeno i šta se još duguje.
sales_s, end_sales_s, …stringIsti iznosi u podrazumevanoj valuti vašeg tržišta.
currency_sign, exchange_rateValuta porudžbine i njen kurs prema podrazumevanoj valuti tržišta.
itemsniz objekataStavke porudžbine: product_id, product_variant_id, product_name, product_variant_name, qty, price, discount, promo_discount, member_discount, line_total i image_url.
fee_itemsniz objekataStavke naknada, na primer dostava, odvojene od proizvoda.
payment_methodsstringKorišćeni načini plaćanja, odvojeni zarezima.
delivery_address, shipment_method_id, shipment_method_nameGde i kako se porudžbina isporučuje.
promo_discount_total, member_discount_total, line_savings_totalnumberKoliko je kupac uštedeo kroz promocije, cene za članove i popuste na stavkama.
comment, tagsSlobodan tekst i vaše oznake.

Pretraga porudžbina#

GET /api/v2/orders

Porudžbine vaše aplikacije, najnovije prve, sa stavkama. Koristite ga da preuzimate nove porudžbine, na primer na svakih nekoliko minuta, sa dateTimeFrom postavljenim na poslednju porudžbinu koju ste videli.

Važe prava korisnika tokena. Korisnik kom su u Admin-u dozvoljeni samo neki prodajni kanali vidi samo njihove porudžbine, i nijednu porudžbinu bez kanala. Korisniku tokena dajte pristup svakom kanalu koji želite da čitate.

Parametri upita

ParametarOpis
dateTimeFrom, dateTimeTodatetimePorudžbine napravljene od ili do ovog trenutka, uključivo, na primer 2026-10-01T00:00:00. Svaki može da se pošalje sam.
searchstringDeo broja porudžbine ili računa, ili imena, emaila ili telefona kupca.
customerIdintegerPorudžbine jednog kupca.
appLocationIdintegerPorudžbine jedne prodajne lokacije.
orderBystring · podrazumevano order_date descorder_date, id, order_number, invoice_number, sales, end_sales, paid, debt ili customer_name, po želji sa asc ili desc iza. Sve ostalo se vraća na podrazumevano.
offsetinteger · podrazumevano 0Koliko porudžbina da se preskoči.
limitinteger · podrazumevano 30Koliko porudžbina da se vrati, najviše 10.000.

Brojčani parametar koji nije broj se zanemaruje, pa proverite vrednosti: greška u kucanju proširuje pretragu umesto da je obori.

Vraća

data: listu porudžbina. Ukupnog broja nema; pogledajte Paginaciju i filtriranje.

GET/orders
curl -G "https://api.morffeus.com/api/v2/orders" \
  -H "Authorization: Bearer $MORFFEUS_TOKEN" \
  --data-urlencode "dateTimeFrom=2026-10-01T06:00:00" \
  --data-urlencode "orderBy=order_date asc" \
  -d "limit=100"
const params = new URLSearchParams({
  dateTimeFrom: lastSeen, // order_date poslednje sačuvane
  orderBy: 'order_date asc',
  limit: '100',
});
const res = await fetch(`https://api.morffeus.com/api/v2/orders?${params}`, {
  headers: { Authorization: `Bearer ${process.env.MORFFEUS_TOKEN}` },
});
const { data } = await res.json();
Odgovor200 OK
{
  "data": [
    {
      "id": 903114,
      "data_part": 0,
      "time_part": 1,
      "order_number": "WEB-2026-04812",
      "order_date": "2026-10-01T07:12:40",
      "customer_id": 5521,
      "first_name": "Ana",
      "last_name": "Petrović",
      "app_location_id": 31,
      "order_status": {
        "id": 1,
        "name": "Saved",
        "color": "#64748b",
        "final": false
      },
      "payment_status": { "id": 3, "name": "Captured", … },
      "delivery_status": { "id": 1, "name": "Pending", … },
      "end_sales": "1.290,00",
      "currency_sign": "RSD",
      "payment_methods": "Card",
      "items": [
        {
          "product_variant_id": 91120,
          "product_name": "Dog food",
          "qty": 1.0,
          "price": "1.290,00",
          …
        }
      ],
      …
    }
  ]
}

Čitanje jedne porudžbine#

GET /api/v2/orders/{id}

Zapis jedne porudžbine, sa plaćanjima i porezima. dataPart i timePart su ovde opcioni, ali uz njih se porudžbina brže nalazi.

Vraća

data: polja porudžbine, sa iznosima kao brojevima i id-jevima statusa (order_status_id, payment_status_id, delivery_status_id), plus:

  • payments: svako plaćanje sa amount, payment_method, payment_method_type, payment_status, payment_date i finalized.
  • tax_brackets: po stopi PDV-a, label, rate, taxable_base i tax_amount.
  • transaction_reference: kod plaćanja karticom, provajder, id transakcije, autorizacioni kod, vrsta kartice i maskiran broj, ili null.
  • customer_data, delivery_data, billing_data: ono što je uneto pri naplati.
  • claims_count: koliko je reklamacija registrovano na porudžbini.

Ovaj poziv ne vraća stavke porudžbine; one su u redu porudžbine u GET /orders. Porudžbina koja nije u vašoj aplikaciji, ili koju korisnik tokena ne sme da vidi, vraća 404 sa praznim telom.

GET/orders/{id}
curl -G "https://api.morffeus.com/api/v2/orders/903114" \
  -d "dataPart=0" -d "timePart=1" \
  -H "Authorization: Bearer $MORFFEUS_TOKEN"
Odgovor200 OK
{
  "data": {
    "id": 903114,
    "data_part": 0,
    "time_part": 1,
    "order_number": "WEB-2026-04812",
    "order_status_id": 1,
    "payment_status_id": 3,
    "delivery_status_id": 1,
    "end_sales": 1290.0,
    "paid": 1290.0,
    "payments": [
      {
        "amount": 1290.0,
        "payment_method": "Card",
        "payment_status": "Captured",
        "finalized": true,
        …
      }
    ],
    "tax_brackets": [
      {
        "label": "20%",
        "rate": 20.0,
        "taxable_base": 1075.0,
        "tax_amount": 215.0,
        "vat_id": 2
      }
    ],
    "claims_count": 0,
    …
  }
}

Izmena porudžbine#

PUT /api/v2/orders/{id}

Menja polja koja pošaljete: najčešće status dok porudžbina prolazi kroz isporuku, broj za praćenje pošiljke ili broj računa iz vašeg ERP-a. PATCH radi isto.

Parametri

ParametarOpis
dataPart, timePartobaveznointegerOstatak id-ja porudžbine, u upitu ili u telu zahteva.
orderobaveznoobjectPolja koja se menjaju.
order.order_status_id, payment_status_id, delivery_status_idintegerNovi statusi, iz lista.
order.tracking_number, invoice_number, commentstringPraćenje pošiljke, broj računa, slobodan tekst.
order.tagsniz stringovaZamenjuje oznake porudžbine.

Iznosi se ne preračunavaju i stavke se ovde ne mogu menjati. Da biste poništili porudžbinu, otkažite je.

Vraća

data: polja porudžbine posle izmene.

Greške

StatusKada
400Nedostaje dataPart, timePart ili order.
404U vašoj aplikaciji nema takve porudžbine: Order not found.
422Polje nije ispravno, na primer id statusa koji ne postoji. Svako polje navodi svoje greške.
PUT/orders/{id}
ORDER="https://api.morffeus.com/api/v2/orders/903114"
curl -X PUT "$ORDER?dataPart=0&timePart=1" \
  -H "Authorization: Bearer $MORFFEUS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "order": {
      "delivery_status_id": 4,
      "tracking_number": "RR123456789RS"
    }
  }'
Greška404 Not Found
{
  "errors": {
    "message": ["Order not found"]
  }
}

Otkazivanje porudžbine#

DELETE /api/v2/orders/{id}

Otkazuje porudžbinu. Ništa se ne briše: porudžbina ostaje, označena kao otkazana, a uz nju se beleži otkazivanje.

Ovo vraća novac kupcu. Svako naplaćeno plaćanje se refundira preko svog provajdera plaćanja pre nego što se porudžbina otkaže. Ako jedna refundacija ne uspe, poziv se tu zaustavlja, a već urađene refundacije se ne poništavaju.

Poziv redom:

  1. refundira naplaćena plaćanja;
  2. postavlja porudžbinu na Canceled, sa canceled: true, i menja njen status plaćanja;
  3. pravi porudžbinu otkazivanja: kopiju sa negativnim količinama i iznosima, čiji se broj završava sa [-], koja upućuje na original;
  4. otkazuje pretplate kupljene porudžbinom i vraća kupcu pogodnosti lojalnosti koje je na nju potrošio;
  5. izdaje fiskalnu refundaciju kad je original bio fiskalizovan.

Zalihe se ne vraćaju, a bodovi koje je kupac zaradio se ne oduzimaju. Ako se roba vrati, proknjižite zalihe preko Zaliha.

Parametri

ParametarOpis
dataPart, timePartobaveznointegerOstatak id-ja porudžbine, u upitu.

Vraća

data: porudžbinu otkazivanja, a ne original, sa njenim items. Njen original_order_id je porudžbina koju ste otkazali.

Greške

StatusKada
400Nedostaje dataPart ili timePart.
404U vašoj aplikaciji nema takve porudžbine. Telo je prazno.
422Porudžbina je već otkazana: API.Orders.AlreadyCanceled. Refundacija nije uspela, na primer Order has already been refunded.
DELETE/orders/{id}
ORDER="https://api.morffeus.com/api/v2/orders/903114"
curl -X DELETE "$ORDER?dataPart=0&timePart=1" \
  -H "Authorization: Bearer $MORFFEUS_TOKEN"
Odgovor200 OK
{
  "data": {
    "id": 903120,
    "order_number": "WEB-2026-04812 [-]",
    "original_order_id": 903114,
    "canceled": true,
    "end_sales": -1290.0,
    "items": [{ "product_variant_id": 91120, "qty": -1.0, … }],
    …
  }
}
Greška422 Unprocessable Entity
{
  "errors": {
    "Orders": ["API.Orders.AlreadyCanceled"]
  }
}

Status za više porudžbina#

PUT /api/v2/orders/bulk_update

Postavlja jedno polje statusa na jednu vrednost za listu porudžbina, na primer da se cela pošiljka označi kao poslata.

Parametri tela zahteva

ParametarOpis
ordersobaveznoniz nizovaSvaka porudžbina kao [id, data_part, time_part].
columnobaveznostringorder_status_id, payment_status_id, delivery_status_id ili sales_channel_id.
valueobaveznointegerId koji se postavlja.

Porudžbine kojima se status promeni pokreću iste naknadne radnje kao u PUT /orders/{id}. Promena prodajnog kanala ne pokreće nijednu. Grupna izmena ne upisuje istoriju porudžbine.

Vraća

data.updated: koliko se porudžbina promenilo.

Greške

StatusKada
422column nije jedna od četiri: API.Orders.InvalidColumn. Izmena nije uspela, na primer id statusa koji ne postoji: API.Orders.BulkUpdateFailed.
PUT/orders/bulk_update
curl -X PUT "https://api.morffeus.com/api/v2/orders/bulk_update" \
  -H "Authorization: Bearer $MORFFEUS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "orders": [[903114, 0, 1], [903117, 0, 1]],
    "column": "delivery_status_id",
    "value": 4
  }'
Odgovor200 OK
{
  "data": { "updated": 2 }
}

Liste šifarnika#

PozivVraća
GET /order_statusesStatuse porudžbina: id, name, color, final.
GET /payment_statusesStatuse plaćanja, sa istim poljima.
GET /delivery_statusesStatuse isporuke, sa istim poljima.
GET /sales_channelsProdajne kanale: id, name, color, image_url.
GET /order_documents?orderId=Dokumente porudžbine, kao račune i fiskalne isečke: id, name, document_number, document_date, image_url, verification_url, finalized. Pošaljite i dataPart i timePart.
Poslednja izmena 1. oktobra 2026. · API v2 Nešto nije u redu na ovoj stranici?