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.
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.API wykorzystuje uwierzytelnianie oparte na tokenach (Bearer JWT). Tokeny są ważne przez 24 godziny.
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.
Otrzymany token należy umieścić w nagłówku Authorization wszystkich zabezpieczonych żądań:
Authorization: Bearer <otrzymany-token>
Tokeny są ważne przez 24 godziny. Wygasły lub nieprawidłowy token skutkuje odpowiedzią 409 Conflict.
Parametry nagłówka
| Nazwa | In | Typ | Wymagany | Opis |
|---|---|---|---|---|
| tenant-id | header | string | Nie | Kontekst sklepu. Musi zostać pominięty przy uwierzytelnianiu administratora. |
Request Body (application/json)
{
"username": "nazwa-uzytkownika",
"password": "haslo"
}
Odpowiedź
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
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
Punkty końcowe zwracające listy obsługują jednolite parametry zapytania dla paginacji, filtrowania i sortowania.
Parametry zapytania (punkty końcowe list)
| Parametr | Domyślnie | Opis |
|---|---|---|
| p | 0 | Numer strony (liczony od 0) |
| s | 10 | Liczba wpisów na stronę |
| f | — | Wyrażenie filtrujące (patrz niżej) |
| o | — | Wyrażenie sortujące (patrz niżej) |
Składnia filtrów (parametr f)
Filtry podaje się jako grupy klucz-wartość:
# Prosty filtr (wyszukiwanie podciągu) f=fieldName::value # Wiele wartości (połączone operatorem LUB) f=fieldName::val1~~val2 # Wykluczanie (prefiks --) f=fieldName::--wykluczonaWartosc # Kombinacja f=name::Jan~~--Janusz,email::@example.com # Filtr zakresu czasu (ISO 8601) f=min_createdAt::2024-01-01T00:00:00.000Z f=max_createdAt::2024-12-31T23:59:59.999Z
Składnia sortowania (parametr o)
# Rosnąco o=name::ASC # Malejąco o=createdAt::DESC # Wiele pól o=createdAt::DESC,name::ASC
Zarządzanie inwentarzem produktów sklepu. Obsługuje operacje CRUD oraz operacje masowe.
Nagłówki
| Nazwa | In | Wymagany | Opis |
|---|---|---|---|
| tenant-id | header | ID sklepu | |
| Authorization | header | Bearer <token> |
Parametry zapytania
| Nazwa | Typ | Opis |
|---|---|---|
| p | integer | Strona (domyślnie: 0) |
| s | integer | Rozmiar strony (domyślnie: 10) |
| f | string[] | Filtr: name, SKU, vatClass, status |
| o | string[] | 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 */ }
}
]
}
Parametry ścieżki
| Nazwa | In | Opis |
|---|---|---|
| sku* | path | Unikalny identyfikator produktu w sklepie (Stock Keeping Unit) |
Odpowiedź (200) — ProductDataDTO
{
"base": { /* Podstawowe dane produktu (nazwa, SKU, cena itd.) */ },
"additional": { /* Pola rozszerzone */ }
}
Request Body (application/json) — ProductDataDTO
{
"base": {
// Pola obowiązkowe i dane produktu (nazwa, SKU, cena, status itd.)
},
"additional": {
// Opcjonalne pola dodatkowe
}
}
Odpowiedź
Request Body (application/json)
["produktId1", "produktId2"]
Odpowiedź
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"]
}]
Symuluje operację masową i pokazuje stan przed/po — bez zapisywania danych.
Request Body
{
"operationId": "set-status",
"parameters": { "status": "ACTIVE" },
"confirmAll": false
}
Wykonuje operację masową na przefiltrowanych produktach. Trwale zmienia dane.
Parametry zapytania
| Nazwa | Opis |
|---|---|
| f | Filtr określający, których produktów dotyczy operacja |
Request Body
{
"operationId": "set-status",
"parameters": { "status": "INACTIVE" }
}
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
Pola filtrów (parametr f)
| Pole | Format | Opis |
|---|---|---|
| min_createdAt | ISO 8601 | Utworzone od daty |
| max_createdAt | ISO 8601 | Utworzone do daty |
| doctype | ORDER/CONTRACT/INVOICE | Typ transakcji |
| docId | string | ID dokumentu |
| processId | string | ID procesu |
| processType | string | Pipeline procesu |
| payload.channel | string | Kanał sprzedaży |
| payload.email | string | Adres 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
Parametry ścieżki
| Nazwa | Opis |
|---|---|
| processId* | ID procesu (grupuje powiązane ze sobą transakcje) |
| docId* | ID dokumentu konkretnej transakcji |
Parametry zapytania
| Nazwa | Wymagany | Opis |
|---|---|---|
| props | Pola, dla których mają zostać wyznaczone wartości distinct | |
| and | Nie | Prefiltr AND |
| or | Nie | Prefiltr OR |
Odpowiedź (200)
{
"doctype": ["ORDER", "INVOICE"],
"payload.channel": ["online", "terminal"]
}
Parametry ścieżki
| Nazwa | Opis |
|---|---|
| processId* | ID procesu |
| docId* | ID dokumentu transakcji do anulowania |
Parametry zapytania
| Nazwa | Opis |
|---|---|
| reason | Opcjonalny powód anulowania |
Parametry ścieżki
| Nazwa | Opis |
|---|---|
| processId* | ID procesu — anulowane zostaną wszystkie powiązane transakcje |
Parametry zapytania
| Nazwa | Opis |
|---|---|
| reason | Opcjonalny powód anulowania |
Identyczne opcje filtrowania i sortowania jak w punkcie administracyjnym, jednak bez uwierzytelniania Bearer. Filtruje dane dostępne w kontekście sklepu.
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.
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": []
}]
}
Parametry ścieżki
| Nazwa | Opis |
|---|---|
| id* | MongoDB ObjectId 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": []
}
Taki sam request body jak w POST. Pełne zastąpienie rekordu.
Request Body — RelationDeltaDTO
{
"add": ["orgId1", "orgId2"],
"remove": ["stareOrgId"]
}
Odpowiedź (200) — OkDTO
{ "ok": true }
Request Body
["id1", "id2", "id3"]
Zarządzanie firmami i organizacjami. Analogicznie do osób dostępne również poprzez dwie równoległe ścieżki.
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": []
}]
}
Request Body — OrganisationDTO
{
"name": "Przykład Sp. z o.o.",
"organisationId": "zewnetrzne-id",
"addresses": [],
"communications": [],
"types": []
}
Request Body — RelationDeltaDTO
{
"add": ["personId1"],
"remove": []
}
Slugi definiują trasy URL w sklepie i prezentują pojedyncze produkty (product) lub listy produktów (product-list).
Odpowiedź — PageSlug
{
"content": [{
"id": "507f...",
"slug": "beton-c25-30",
"label": "Beton C25/30",
"objectType": "product",
"collection": "products",
"refId": "produktMongoId",
"inactive": false
}]
}
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
}
Przydatne do znalezienia sluga przypisanego do znanego produktu.
Parametry ścieżki
| Nazwa | Opis |
|---|---|
| fieldName* | Pole produktu, z którego generowane są slugi |
Parametry zapytania
| Nazwa | Opis |
|---|---|
| values | Opcjonalne ograniczenie do określonych wartości pola |
Parametry zapytania
| Nazwa | Opis |
|---|---|
| navScope | Opcjonalny filtr kontekstu nawigacji |
Odpowiedź (200)
["main-nav", "footer", "sidebar"]
Request Body — tablica ItemOrderDTO
[
{ "sku": "SKU-001", "categoryId": "catId", "order": 0 },
{ "sku": "SKU-002", "categoryId": "catId", "order": 1 }
]
Request Body — NavigationUpdateDTO
{
"slugId": "slugMongoId",
"navigationNames": ["main-nav", "footer"]
}
Parametry ścieżki
| Nazwa | Opis |
|---|---|
| key* | Klucz ustawienia |
Request Body — Setting
{
"key": "klucz-ustawienia",
"public": {
// Ustawienia dostępne publicznie
"theme": "dark"
},
"private": {
// Dostępne tylko dla uwierzytelnionych żądań
"apiKey": "secret"
}
}
Parametry zapytania
| Nazwa | Opis |
|---|---|
| p | Strona |
| s | Rozmiar strony |
| f | Filtr nazwy pliku |
| mime | Filtr typu MIME (np. image/png) |
Żądanie jako multipart/form-data z polem file.
Content-Type: multipart/form-data file: [binary data]
Integracja Stripe do obsługi płatności. Dostępne są dwa tryby: standardowy Stripe (stripe) i zewnętrzny Stripe (stripe-external).
Odpowiedź (200)
{ "publishableKey": "pk_live_..." }
Zwraca aktualny status płatności sklepu.
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
| Nazwa | Opis |
|---|---|
| Stripe-Signature* | Nagłówek podpisu ustawiany przez Stripe w celu weryfikacji |
Odpowiedź (200) — WebhookTestStatusDTO
{
"sandbox": {
"mode": "SANDBOX",
"passed": true,
"ranAt": "2024-01-15T10:30:00Z",
"durationMs": 234,
"pending": false
},
"production": { /* analogicznie */ }
}
Parametry ścieżki
| Nazwa | Opis |
|---|---|
| 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
}
Parametry ścieżki
| Nazwa | Opis |
|---|---|
| entity* | Typ encji (np. products, persons) |
Odpowiedź
Plik binarny (string format: binary)
Przegląd wszystkich używanych struktur danych.
PersonDTO
| Pole | Typ | Opis |
|---|---|---|
| id | string | MongoDB ObjectId |
| firstName | string | Imię |
| lastName | string | Nazwisko |
| string | Adres e-mail | |
| salutation | string | Zwrot grzecznościowy |
| title | string | Tytuł (np. dr) |
| personId | string | Zewnętrzne/własne ID |
| tenantId | integer | Przypisanie do tenanta |
| addresses | AddressDTO[] | Adresy |
| communications | CommunicationDTO[] | Kanały komunikacji |
| organisations | OrganisationDTO[] | Przypisane organizacje |
| types | BusinessContactTypeDTO[] | Typy kontaktów |
| createdAt | datetime | Data utworzenia |
| updatedAt | datetime | Ostatnia aktualizacja |
AddressDTO
| Pole | Typ | Opis |
|---|---|---|
| street | string | Nazwa ulicy |
| streetNumber | string | Numer domu |
| supplemental | string | Dodatkowe informacje adresowe |
| zipCode | string | Kod pocztowy |
| city | string | Miasto |
| country | string | Kraj (kod ISO, np. PL) |
| type | string | Typ adresu (np. MAIN, BILLING) |
Slug
| Pole | Typ | Wymagany | Opis |
|---|---|---|---|
| id | string | — | MongoDB ObjectId |
| slug | string | Podtrasa URL sklepu | |
| label | string | — | Czytelna nazwa |
| collection | string | Kolekcja MongoDB | |
| objectType | string | "product" lub "product-list" | |
| refId | string | — | Referencja produktu (przy product) |
| fields | object | — | Filtr dla product-list |
| context | string[] | — | Konteksty wyświetlania |
| defaultSort | SortField[] | — | Sortowanie domyślne |
| inactive | boolean | — | Dezaktywuje slug |
ProductDataDTO
| Pole | Typ | Opis |
|---|---|---|
| base | object | Podstawowe dane produktu (dynamiczne, zależne od sklepu) |
| additional | object | Rozszerzalne pola dodatkowe |
RelationDeltaDTO
Używany w punktach końcowych PATCH do zarządzania relacjami (osoby↔organizacje).
| Pole | Typ | Opis |
|---|---|---|
| add | string[] | ID, które mają zostać dodane |
| remove | string[] | 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