Punkty klienta (Child-Customer-Id)
API zewnętrzne AMPER: lista punktów, dla których działa login (/external/v1/customers/related/), i wybór punktu nagłówkiem Child-Customer-Id.
Ostatnia aktualizacja: 3 listopada 2026
Jeden login w AMPER często obsługuje kilka punktów klienta: oddziały, sklepy sieci albo profile z osobnymi cenami. Integracja, która przypisuje swoje sklepy do konkretnych punktów, pobiera listę punktów loginu i w każdym zapytaniu wskazuje punkt nagłówkiem Child-Customer-Id.
Punkty wybiera się tylko przy logowaniu integratora (token). Klucz API jest przypisany do jednego klienta i punktu nie wybiera.
Lista punktów
GET https://{amper_ws}/external/v1/customers/related/
Authorization: Bearer <access_token>
Odpowiedź 200 OK:
[
{
"id": 42,
"name": "Hurtownia Kowalski sp. z o.o.",
"short_name": "KOWALSKI",
"tax_id": "1234567890",
"address": "15-453 Białystok, Nowy Świat 9/4",
"customer_external_id": "ERP-KLIENT-0042"
},
{
"id": 57,
"name": "Hurtownia Kowalski – oddział Łomża",
"short_name": "KOWALSKI-LOM",
"tax_id": "1234567890",
"address": "18-400 Łomża, Polowa 12",
"customer_external_id": null
}
]
| Pole | Opis |
|---|---|
id |
ID punktu (klienta) w AMPER – wartość nagłówka Child-Customer-Id i pola customer_id w create-order |
name |
pełna nazwa |
short_name |
nazwa skrócona |
tax_id |
NIP |
address |
adres domyślny w jednym tekście: kod pocztowy, miasto, ulica; pusty tekst, gdy punkt nie ma adresu domyślnego |
customer_external_id |
ID w systemie ERP – to samo, które przyjmuje pole customer_external_id w create-order; null, gdy klient nie pochodzi z ERP |
Na liście są:
- klient, do którego należy login,
- klienci z nim powiązani w AMPER (np. oddziały) – ci sami, których sklep B2B pokazuje w wyborze kontrahenta.
Lista zawiera tylko aktywnych klientów i zawsze dotyczy zalogowanego loginu – nagłówek Child-Customer-Id nie ma na nią wpływu. Zwracana jest w całości, bez stronicowania. Konta integracji ERP (Translator) i administratorzy też dostają tylko swoją listę, nie listę wszystkich klientów. Z kluczem API lista jest pusta.
Punkty zmieniają się rzadko. Pobieraj listę przy konfiguracji integracji i np. raz dziennie, żeby zauważyć nowe i wyłączone punkty.
Wybór punktu w zapytaniu
Dodaj nagłówek Child-Customer-Id z id punktu do zapytań GET w /external/v1/. API zwraca wtedy dane tego punktu – jego ceny, asortyment, stany i promocje:
GET https://{amper_ws}/external/v1/products/
Authorization: Bearer <access_token>
Child-Customer-Id: 57
Bez nagłówka API zwraca dane klienta, do którego należy login.
Nagłówek przyjmuje tylko id z listy punktów. Klient spoza listy, punkt nieaktywny, nieistniejące id albo wartość, która nie jest liczbą, dają odpowiedź 403:
{ "detail": "You may not act for the customer named in the request headers (Child-Customer-Id)." }
API nie podmienia wtedy punktu na klienta loginu, więc integracja nie dostanie przez pomyłkę cen i stanów innego punktu. Po takim 403 pobierz listę punktów ponownie: punkt mógł zostać wyłączony albo odłączony od loginu. Z kluczem API nie wysyłaj nagłówka – zapytanie z nim też kończy się kodem 403.
Zamówienia
W POST /external/v1/create-order punkt wskazuje pole customer_id (albo customer_external_id) w treści żądania – nagłówek nie ma tam znaczenia. Użyj id albo customer_external_id z listy punktów. Szczegóły: Tworzenie zamówienia „create-order”.
Limit zapytań
Limit 3 jednoczesnych zapytań dotyczy loginu, nie punktu: zapytania do różnych punktów jednego loginu dzielą te same 3 miejsca. Synchronizuj punkty po kolei. Szczegóły: Stronicowanie, limity i kody odpowiedzi.
Przykład: synchronizacja wszystkich punktów
import requests
base_url = "https://{amper_ws}/external/v1"
auth = {"Authorization": f"Bearer {access_token}"}
points = requests.get(f"{base_url}/customers/related/", headers=auth, timeout=120).json()
for point in points:
headers = {**auth, "Child-Customer-Id": str(point["id"])}
offset = 0
while True:
response = requests.get(f"{base_url}/products/", headers=headers, timeout=120,
params={"limit": 500, "offset": offset, "ordering": "id"})
response.raise_for_status()
page = response.json()
save_products(point["id"], page["results"]) # zapis w sklepie przypisanym do punktu
if not page["next"]:
break
offset += 500
Logowanie, odświeżanie tokena i ponawianie po 429 pokazuje klient z artykułu Przykłady kodu.
Potrzebujesz pomocy? Napisz na support@ampliapps.com albo zadzwoń: +48 85 6000 263.