🤖 Halo, tu API!

Jeśli prowadzisz serwis z ogłoszeniami, CRM nieruchomości lub własne narzędzie dla agentów — możesz dodawać oferty działek do tuziemia.pl w pełni automatycznie. Bez klikania, bez kopiowania, bez zbędnych kroków. Jedno żądanie HTTP i ogłoszenie pojawia się w serwisie natychmiast 🚀.

API jest całkowicie otwarte i bezpłatne 🎉 — nie wymaga rejestracji, logowania ani klucza dostępu. Wystarczy znać numer ewidencyjny działki i cenę. Resztą zajmuje się tuziemia.pl — automatycznie wyznacza powierzchnię, region, sprawdza plany zagospodarowania i powiadamia zainteresowanych kupujących 📬.

POSThttps://tuziemia.pl/api/oferta

Nagłówek żądania: Content-Type: application/json

📋 Parametry żądania

Body żądania to obiekt JSON. Wymagane są tylko parcelIds i price oraz przynajmniej jeden kontakt do sprzedającego. Reszta jest opcjonalna — im więcej podasz, tym bardziej kompletne będzie ogłoszenie 👌.

PoleTypWymaganeOpis
parcelIdsstring[]takLista numerów ewidencyjnych działek. Min. 1, maks. 50. Np. "142503_5.0004.AR_1.590/1"
pricenumbertakCena w PLN. Liczba całkowita większa od zera, maks. 1 000 000 000.
sellerNamestringnieImię i nazwisko lub nazwa firmy sprzedającego. Min. 2, maks. 100 znaków.
sellerPhonestringczęściowo*Telefon kontaktowy. Akceptowany format: +48 600 123 456
sellerEmailstringczęściowo*Adres email sprzedającego. Musi być poprawnym adresem email.
descriptionstringnieOpis oferty widoczny w ogłoszeniu. Maksymalnie 5000 znaków.

* Wymagany jest co najmniej jeden z: sellerPhone lub sellerEmail.

💡 Przykłady

Poniżej znajdziesz gotowe przykłady w kilku popularnych środowiskach. Skopiuj, podmień dane działki i gotowe ✅.

🖥️ cURL

Najprostszy sposób na szybki test — wystarczy terminal.

curl -X POST https://tuziemia.pl/api/oferta \
  -H "Content-Type: application/json" \
  -d '{
    "parcelIds": ["142503_5.0004.AR_1.590/1"],
    "price": 250000,
    "sellerName": "Jan Kowalski",
    "sellerPhone": "+48 600 123 456",
    "sellerEmail": "jan@example.com",
    "description": "Dzialka budowlana 1200m2, media na granicy."
  }'

🌐 JavaScript (fetch)

Idealne do integracji w aplikacji webowej lub skrypcie Node.js.

const response = await fetch('https://tuziemia.pl/api/oferta', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    parcelIds: ['142503_5.0004.AR_1.590/1'],
    price: 250000,
    sellerName: 'Jan Kowalski',
    sellerPhone: '+48 600 123 456',
    sellerEmail: 'jan@example.com',
    description: 'Dzialka budowlana 1200m2, media na granicy.',
  }),
});

const oferta = await response.json();
console.log('Dodano oferte:', oferta.offerId);

🐍 Python

Świetne do skryptów wsadowych i automatycznego importu z baz danych.

import requests

res = requests.post(
    'https://tuziemia.pl/api/oferta',
    json={
        'parcelIds': ['142503_5.0004.AR_1.590/1'],
        'price': 250000,
        'sellerName': 'Jan Kowalski',
        'sellerPhone': '+48 600 123 456',
        'sellerEmail': 'jan@example.com',
        'description': 'Dzialka budowlana 1200m2, media na granicy.',
    }
)

print(res.json())

⚙️ n8n — HTTP Request

Dodaj węzeł HTTP Request, ustaw metodę POST, URL https://tuziemia.pl/api/oferta, Body Content Type: JSON. Pola podłącz z poprzedniego węzła przez wyrażenia — n8n automatycznie podstawi dane z każdego rekordu 🔄.

{
  "parcelIds":   ["={{ $json.parcelId }}"],
  "price":        ={{ $json.price }},
  "sellerName":  "={{ $json.name }}",
  "sellerPhone": "={{ $json.phone }}",
  "sellerEmail": "={{ $json.email }}",
  "description": "={{ $json.description }}"
}

📨 Odpowiedzi serwera

Każda odpowiedź zawiera kod HTTP oraz obiekt JSON. Warto obsłużyć oba przypadki w swojej integracji 🛡️.

Sukces — serwer zwraca status 201 Created:

{
  "offerId":   "664f1a2b3c4d5e6f7a8b9c0d",
  "url":       "/oferta/142503_5.0004.AR_1.590/1",
  "area":      1234,
  "region":    "mazowieckie",
  "price":     250000,
  "parcelIds": ["142503_5.0004.AR_1.590/1"],
  "expiresAt": "2025-07-13T12:00:00.000Z"
}

⚠️ Błąd walidacji — serwer zwraca status 422 Unprocessable Entity:

{
  "statusCode": 422,
  "message": "Bledy walidacji",
  "data": {
    "price":       ["Cena musi byc wieksza od 0"],
    "sellerEmail": ["Wymagany jest co najmniej email lub telefon"]
  }
}

🙋 Pytania?

Potrzebujesz pomocy z integracją, masz pytanie techniczne lub chcesz zgłosić problem? Napisz na kontakt@tuziemia.pl — odpiszemy tak szybko jak to możliwe 💬.