Dokumentacja · Referencja API

Wiresphere REST API

Pełna dokumentacja deweloperska REST API Wiresphere. To API umożliwia zarządzanie produktami, transakcjami, kontaktami klientów, płatnościami i ustawieniami sklepu w kontekście systemu multi-tenant.

W skrócie: OpenAPI 3.0.1 · bazowy URL https://api.wiresphere.com (PLACEHOLDER) · uwierzytelnianie za pomocą Bearer JWT (ważność 24 h) · nagłówek tenant-id obowiązkowy w niemal wszystkich punktach końcowych. Powrót do przeglądu dokumentacji.
Uwierzytelnianie

API wykorzystuje uwierzytelnianie oparte na tokenach (Bearer JWT). Tokeny są ważne przez 24 godziny.

1
Uzyskanie tokenu

Należy wysłać username i password do punktu końcowego uwierzytelniania. W przypadku użytkowników administracyjnych nagłówek tenant-id nie może zostać przesłany.

2
Użycie tokenu

Otrzymany token należy umieścić w nagłówku Authorization wszystkich zabezpieczonych żądań:

Authorization: Bearer <otrzymany-token>
3
Wygaśnięcie tokenu

Tokeny są ważne przez 24 godziny. Wygasły lub nieprawidłowy token skutkuje odpowiedzią 409 Conflict.

POST
/api/v1/auth/token-auth
Uzyskanie tokenu — weryfikacja danych logowania użytkownika i zwrócenie JWT

Parametry nagłówka

NazwaInTypWymaganyOpis
tenant-id header string Nie Kontekst sklepu. Musi zostać pominięty przy uwierzytelnianiu administratora.

Request Body (application/json)

{
  "username": "nazwa-uzytkownika",
  "password": "haslo"
}

Odpowiedź

200 Token utworzony pomyślnie
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
401 Nieprawidłowe dane logowania
400 Błędne żądanie
Koncepcja tenantów

API jest wielodostępne (multi-tenant). Każde żądanie (z wyjątkiem uwierzytelniania jako administrator) musi identyfikować kontekst sklepu za pomocą nagłówka tenant-id.

Nagłówek tenant-id

Nagłówek tenant-id jest polem obowiązkowym w niemal wszystkich punktach końcowych. Określa on, w którym kontekście sklepu wykonywana jest operacja. Żądania bez tego nagłówka są odrzucane.

tenant-id: id-mojego-sklepu
Inwentarz (produkty)

Zarządzanie inwentarzem produktów sklepu. Obsługuje operacje CRUD oraz operacje masowe.

GET
/api/v1/admin/inventory/
Pobranie wszystkich produktów (z paginacją)

Nagłówki

NazwaInWymaganyOpis
tenant-idheaderID sklepu
AuthorizationheaderBearer <token>

Parametry zapytania

NazwaTypOpis
pintegerStrona (domyślnie: 0)
sintegerRozmiar strony (domyślnie: 10)
fstring[]Filtr: name, SKU, vatClass, status
ostring[]Sortowanie: name, SKU, vatClass, status

Odpowiedź (200)

{
  "totalElements": 42,
  "totalPages": 5,
  "size": 10,
  "number": 0,
  "first": true,
  "last": false,
  "content": [
    {
      "base": { /* Podstawowe dane produktu */ },
      "additional": { /* Dane dodatkowe */ }
    }
  ]
}
GET
/api/v1/admin/inventory/{sku}
Pobranie pojedynczego produktu po SKU

Parametry ścieżki

NazwaInOpis
sku*pathUnikalny identyfikator produktu w sklepie (Stock Keeping Unit)

Odpowiedź (200) — ProductDataDTO

{
  "base": { /* Podstawowe dane produktu (nazwa, SKU, cena itd.) */ },
  "additional": { /* Pola rozszerzone */ }
}
PUT
/api/v1/admin/inventory/
Utworzenie lub aktualizacja produktu (upsert)

Request Body (application/json) — ProductDataDTO

{
  "base": {
    // Pola obowiązkowe i dane produktu (nazwa, SKU, cena, status itd.)
  },
  "additional": {
    // Opcjonalne pola dodatkowe
  }
}

Odpowiedź

200 ID utworzonego/zaktualizowanego produktu (string)
DELETE
/api/v1/admin/inventory/
Usunięcie wielu produktów na podstawie ich ID

Request Body (application/json)

["produktId1", "produktId2"]

Odpowiedź

200 Potwierdzenie (string)
GET
/api/v1/admin/inventory/operations
Pobranie dostępnych operacji masowych

Zwraca wszystkie zarejestrowane operacje masowe wraz ze schematami ich parametrów.

Odpowiedź (200) — tablica ProductOperationRegistrationDTO

[{
  "operationId": "set-status",
  "description": "Ustawia status produktów",
  "parameterTypes": { "status": "string" },
  "previewProperties": ["status"]
}]
POST
/api/v1/admin/inventory/operations/preview
Podgląd operacji masowej (dry run)

Symuluje operację masową i pokazuje stan przed/po — bez zapisywania danych.

Request Body

{
  "operationId": "set-status",
  "parameters": { "status": "ACTIVE" },
  "confirmAll": false
}
POST
/api/v1/admin/inventory/operations/execute
Wykonanie operacji masowej

Wykonuje operację masową na przefiltrowanych produktach. Trwale zmienia dane.

Parametry zapytania

NazwaOpis
fFiltr określający, których produktów dotyczy operacja

Request Body

{
  "operationId": "set-status",
  "parameters": { "status": "INACTIVE" }
}
Transakcje

Transakcje obejmują wszystkie zamówienia, umowy i faktury. Dostępny jest zarówno publiczny, jak i administracyjny punkt końcowy.

Dostępne wartości doctype

Przy filtrowaniu po doctype znane są następujące wartości: ORDER, CONTRACT, INVOICE

GET
/api/v1/admin/transaction/
Pobranie wszystkich transakcji (admin) — z paginacją i filtrowaniem

Pola filtrów (parametr f)

PoleFormatOpis
min_createdAtISO 8601Utworzone od daty
max_createdAtISO 8601Utworzone do daty
doctypeORDER/CONTRACT/INVOICETyp transakcji
docIdstringID dokumentu
processIdstringID procesu
processTypestringPipeline procesu
payload.channelstringKanał sprzedaży
payload.emailstringAdres e-mail klienta

Pola sortowania (parametr o)

createdAt, docId, payload.netTotalPrice, payload.grossTotalPrice, payload.customer.name

Przykład

GET /api/v1/admin/transaction/?f=doctype::ORDER,min_createdAt::2024-01-01T00:00:00.000Z&o=createdAt::DESC&p=0&s=20
Authorization: Bearer <token>
tenant-id: moj-sklep
GET
/api/v1/admin/transaction/{processId}/{docId}
Pobranie pojedynczej transakcji

Parametry ścieżki

NazwaOpis
processId*ID procesu (grupuje powiązane ze sobą transakcje)
docId*ID dokumentu konkretnej transakcji
GET
/api/v1/admin/transaction/filter-values
Pobranie unikalnych wartości (distinct) dla filtrów

Parametry zapytania

NazwaWymaganyOpis
propsPola, dla których mają zostać wyznaczone wartości distinct
andNiePrefiltr AND
orNiePrefiltr OR

Odpowiedź (200)

{
  "doctype": ["ORDER", "INVOICE"],
  "payload.channel": ["online", "terminal"]
}
POST
/api/v1/admin/transaction/{processId}/{docId}/cancel
Anulowanie pojedynczej transakcji

Parametry ścieżki

NazwaOpis
processId*ID procesu
docId*ID dokumentu transakcji do anulowania

Parametry zapytania

NazwaOpis
reasonOpcjonalny powód anulowania
POST
/api/v1/admin/transaction/{processId}/cancel
Anulowanie całego procesu (wszystkich transakcji)

Parametry ścieżki

NazwaOpis
processId*ID procesu — anulowane zostaną wszystkie powiązane transakcje

Parametry zapytania

NazwaOpis
reasonOpcjonalny powód anulowania
GET
/api/v1/transaction/
Pobranie transakcji (publiczny punkt końcowy — token Bearer nie jest wymagany)

Identyczne opcje filtrowania i sortowania jak w punkcie administracyjnym, jednak bez uwierzytelniania Bearer. Filtruje dane dostępne w kontekście sklepu.

Osoby (CRM)

Zarządzanie osobami w CRM (klienci, kontakty). Istnieją dwie równoległe ścieżki kontrolerów o identycznej funkcjonalności.

Równoległe punkty końcowe

Osobami można zarządzać poprzez dwie ścieżki: /api/v1/admin/person/ oraz /api/v1/admin/business-contacts/people/. Obie zapewniają tę samą funkcjonalność — w nowych integracjach zalecamy ścieżkę business-contacts.

GET
/api/v1/admin/person/all
Pobranie wszystkich osób (z paginacją)

Pola filtrów (parametr f)

personId, firstName, lastName, email

Odpowiedź (200) — PageCrmPersonDTO

{
  "totalElements": 100,
  "content": [{
    "id": "507f1f77bcf86cd799439011",
    "firstName": "Jan",
    "lastName": "Kowalski",
    "email": "jan@example.com",
    "personId": "zewn-123",
    "addresses": [],
    "communications": [],
    "organisations": [],
    "types": []
  }]
}
GET
/api/v1/admin/person/{id}
Pobranie pojedynczej osoby

Parametry ścieżki

NazwaOpis
id*MongoDB ObjectId osoby
POST
/api/v1/admin/person
Utworzenie osoby

Request Body (application/json) — PersonDTO

{
  "firstName": "Jan",
  "lastName": "Kowalski",
  "email": "jan@example.com",
  "salutation": "Pan",
  "title": "dr",
  "personId": "zewnetrzne-id-123",
  "addresses": [{
    "street": "Przykładowa",
    "streetNumber": "1",
    "zipCode": "00-001",
    "city": "Warszawa",
    "country": "PL",
    "type": "MAIN"
  }],
  "communications": [{
    "type": "PHONE",
    "value": "+48 123 456 789"
  }],
  "types": []
}
PUT
/api/v1/admin/person/{id}
Aktualizacja osoby

Taki sam request body jak w POST. Pełne zastąpienie rekordu.

PATCH
/api/v1/admin/person/{id}/organisations
Zmiana przypisania osoby do organizacji

Request Body — RelationDeltaDTO

{
  "add": ["orgId1", "orgId2"],
  "remove": ["stareOrgId"]
}
DELETE
/api/v1/admin/person/{id}
Usunięcie osoby

Odpowiedź (200) — OkDTO

{ "ok": true }
DELETE
/api/v1/admin/person/bulk-delete
Usunięcie wielu osób jednocześnie

Request Body

["id1", "id2", "id3"]
Organizacje (CRM)

Zarządzanie firmami i organizacjami. Analogicznie do osób dostępne również poprzez dwie równoległe ścieżki.

GET
/api/v1/admin/organisation/all
Pobranie wszystkich organizacji (z paginacją)

Pola filtrów

name (wyszukiwanie podciągu)

Odpowiedź (200) — PageCrmOrganisationDTO

{
  "totalElements": 10,
  "content": [{
    "id": "...",
    "name": "Przykład Sp. z o.o.",
    "organisationId": "zewnetrzne-id",
    "addresses": [],
    "communications": [],
    "people": [],
    "types": []
  }]
}
POST
/api/v1/admin/organisation
Utworzenie organizacji

Request Body — OrganisationDTO

{
  "name": "Przykład Sp. z o.o.",
  "organisationId": "zewnetrzne-id",
  "addresses": [],
  "communications": [],
  "types": []
}
PATCH
/api/v1/admin/organisation/{id}/people
Zmiana przypisania osób do organizacji

Request Body — RelationDeltaDTO

{
  "add": ["personId1"],
  "remove": []
}
Katalog / slugi

Slugi definiują trasy URL w sklepie i prezentują pojedyncze produkty (product) lub listy produktów (product-list).

GET
/api/v1/admin/catalog/
Pobranie wszystkich slugów (z paginacją)

Odpowiedź — PageSlug

{
  "content": [{
    "id": "507f...",
    "slug": "beton-c25-30",
    "label": "Beton C25/30",
    "objectType": "product",
    "collection": "products",
    "refId": "produktMongoId",
    "inactive": false
  }]
}
PUT
/api/v1/admin/catalog/
Utworzenie lub aktualizacja sluga (upsert)

Request Body — Slug

{
  "id": "507f...",           // Podać przy aktualizacji
  "slug": "moj-slug",       // Segment URL (wymagane)
  "collection": "products",  // Kolekcja MongoDB (wymagane)
  "objectType": "product",   // "product" lub "product-list" (wymagane)
  "refId": "...",            // ID produktu (przy objectType "product")
  "fields": {                  // Filtr dla "product-list"
    "category": "beton"
  },
  "defaultSort": [{ "field": "name", "direction": "asc" }],
  "context": ["main-nav"],
  "inactive": false
}
GET
/api/v1/admin/catalog/ref-id/{refId}
Pobranie sluga na podstawie ID referencji (ID produktu)

Przydatne do znalezienia sluga przypisanego do znanego produktu.

POST
/api/v1/admin/catalog/create-slugs/{fieldName}
Automatyczne generowanie slugów

Parametry ścieżki

NazwaOpis
fieldName*Pole produktu, z którego generowane są slugi

Parametry zapytania

NazwaOpis
valuesOpcjonalne ograniczenie do określonych wartości pola
Kategorie i nawigacja
GET
/api/v1/category/navigation
Pobranie nawigacji (publiczne)

Parametry zapytania

NazwaOpis
navScopeOpcjonalny filtr kontekstu nawigacji
GET
/api/v1/admin/category/navigation-contexts
Pobranie dostępnych kontekstów nawigacji

Odpowiedź (200)

["main-nav", "footer", "sidebar"]
PUT
/api/v1/admin/category/items/order
Aktualizacja kolejności elementów w kategorii

Request Body — tablica ItemOrderDTO

[
  { "sku": "SKU-001", "categoryId": "catId", "order": 0 },
  { "sku": "SKU-002", "categoryId": "catId", "order": 1 }
]
POST
/api/v1/admin/category/update-slug-navigations
Dodanie sluga do nawigacji (operacja idempotentna)

Request Body — NavigationUpdateDTO

{
  "slugId": "slugMongoId",
  "navigationNames": ["main-nav", "footer"]
}
Ustawienia
GET
/api/v1/admin/settings/{key}
Pobranie ustawienia po kluczu

Parametry ścieżki

NazwaOpis
key*Klucz ustawienia
PUT
/api/v1/admin/settings
Utworzenie lub aktualizacja ustawienia

Request Body — Setting

{
  "key": "klucz-ustawienia",
  "public": {
    // Ustawienia dostępne publicznie
    "theme": "dark"
  },
  "private": {
    // Dostępne tylko dla uwierzytelnionych żądań
    "apiKey": "secret"
  }
}
Zarządzanie plikami
GET
/api/v1/admin/files/
Wyświetlenie listy plików/obrazów

Parametry zapytania

NazwaOpis
pStrona
sRozmiar strony
fFiltr nazwy pliku
mimeFiltr typu MIME (np. image/png)
POST
/api/v1/admin/files/
Przesłanie pliku

Żądanie jako multipart/form-data z polem file.

Content-Type: multipart/form-data

file: [binary data]
Płatności / Stripe

Integracja Stripe do obsługi płatności. Dostępne są dwa tryby: standardowy Stripe (stripe) i zewnętrzny Stripe (stripe-external).

GET
/api/v1/payment/stripe/public
Pobranie publicznych ustawień Stripe (np. Publishable Key)

Odpowiedź (200)

{ "publishableKey": "pk_live_..." }
GET
/api/v1/payment/stripe/state
Pobranie aktualnego statusu płatności Stripe

Zwraca aktualny status płatności sklepu.

POST
/api/v1/payment/stripe-common/capturable
Webhook Stripe — ustawienie statusu płatności (produkcja)

Tylko dla webhooków Stripe

Ten punkt końcowy służy do obsługi przychodzących zdarzeń webhook Stripe. Nagłówek Stripe-Signature jest obowiązkowy i jest ustawiany automatycznie przez Stripe.

Nagłówki

NazwaOpis
Stripe-Signature*Nagłówek podpisu ustawiany przez Stripe w celu weryfikacji
POST
/api/v1/admin/payment/stripe-common/webhook-test
Test webhooka Stripe (admin)

Odpowiedź (200) — WebhookTestStatusDTO

{
  "sandbox": {
    "mode": "SANDBOX",
    "passed": true,
    "ranAt": "2024-01-15T10:30:00Z",
    "durationMs": 234,
    "pending": false
  },
  "production": { /* analogicznie */ }
}
Import / eksport
POST
/api/v1/admin/import/{entity}
Import encji (upload CSV/JSON)

Parametry ścieżki

NazwaOpis
entity*Typ encji (np. products, persons)

Request Body (multipart)

Content-Type: application/json
file: [binary — plik CSV lub JSON]

Odpowiedź (200) — UploadResponse

{
  "success": true,
  "importCount": 42
}
GET
/api/v1/admin/export/{entity}
Eksport encji (pobranie pliku)

Parametry ścieżki

NazwaOpis
entity*Typ encji (np. products, persons)

Odpowiedź

Plik binarny (string format: binary)

Modele danych (schematy)

Przegląd wszystkich używanych struktur danych.

PersonDTO

PoleTypOpis
idstringMongoDB ObjectId
firstNamestringImię
lastNamestringNazwisko
emailstringAdres e-mail
salutationstringZwrot grzecznościowy
titlestringTytuł (np. dr)
personIdstringZewnętrzne/własne ID
tenantIdintegerPrzypisanie do tenanta
addressesAddressDTO[]Adresy
communicationsCommunicationDTO[]Kanały komunikacji
organisationsOrganisationDTO[]Przypisane organizacje
typesBusinessContactTypeDTO[]Typy kontaktów
createdAtdatetimeData utworzenia
updatedAtdatetimeOstatnia aktualizacja

AddressDTO

PoleTypOpis
streetstringNazwa ulicy
streetNumberstringNumer domu
supplementalstringDodatkowe informacje adresowe
zipCodestringKod pocztowy
citystringMiasto
countrystringKraj (kod ISO, np. PL)
typestringTyp adresu (np. MAIN, BILLING)

Slug

PoleTypWymaganyOpis
idstringMongoDB ObjectId
slugstringPodtrasa URL sklepu
labelstringCzytelna nazwa
collectionstringKolekcja MongoDB
objectTypestring"product" lub "product-list"
refIdstringReferencja produktu (przy product)
fieldsobjectFiltr dla product-list
contextstring[]Konteksty wyświetlania
defaultSortSortField[]Sortowanie domyślne
inactivebooleanDezaktywuje slug

ProductDataDTO

PoleTypOpis
baseobjectPodstawowe dane produktu (dynamiczne, zależne od sklepu)
additionalobjectRozszerzalne pola dodatkowe

RelationDeltaDTO

Używany w punktach końcowych PATCH do zarządzania relacjami (osoby↔organizacje).

PoleTypOpis
addstring[]ID, które mają zostać dodane
removestring[]ID, które mają zostać usunięte

Wiresphere API · OpenAPI 3.0.1 · Dokumentacja wygenerowana w maju 2026

Bazowy URL: https://api.wiresphere.com · Uwierzytelnianie: Bearer JWT · Ważność tokenu: 24 godziny