Dokumentacja API — Pisma Szyte Na Miarę
Darmowy generator dokumentów online. REST API generujące umowy, pisma prawne i wnioski jako pliki PDF. Bez rejestracji, bez kluczy API, bez opłat. Wystarczy jedno zapytanie HTTP.
API obsługuje 11 szablonów dokumentów w trzech kategoriach: umowy, pisma i wnioski. Każdy szablon posiada zdefiniowane pola formularza z walidacją, polami warunkowymi i wartościami domyślnymi.
https://pismoszytenamiare.pl/api/v1
Uwierzytelnianie
API nie wymaga uwierzytelniania. Jest całkowicie darmowe i otwarte dla każdego. Wystarczy wysyłać zapytania HTTP do endpointów poniżej.
GET /api/v1/templates
Pobierz listę wszystkich dostępnych szablonów dokumentów. Opcjonalnie filtruj po kategorii.
Parametry zapytania
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
category |
string | opcjonalny | Filtruj po kategorii: "umowy", "pisma" lub "wnioski" |
Przykładowe zapytanie
curl "https://pismoszytenamiare.pl/api/v1/templates" curl "https://pismoszytenamiare.pl/api/v1/templates?category=umowy"
Przykładowa odpowiedź
{
"status": "success",
"count": 11,
"data": [
{
"id": "umowa-najmu",
"name": "Rental Agreement",
"namePl": "Umowa najmu",
"category": "umowy",
"categoryPl": "Umowy",
"description": "Standard rental/lease agreement",
"descriptionPl": "Standardowa umowa najmu lokalu",
"fieldCount": 13
},
{
"id": "umowa-najmu-okazjonalny",
"name": "Occasional Rental Agreement",
"namePl": "Umowa najmu okazjonalnego",
"category": "umowy",
"categoryPl": "Umowy",
"description": "Occasional rental agreement (Art. 19a)",
"descriptionPl": "Umowa najmu okazjonalnego (Art. 19a)",
"fieldCount": 16
},
{
"id": "umowa-o-prace",
"name": "Employment Contract",
"namePl": "Umowa o pracę",
"category": "umowy",
"categoryPl": "Umowy",
"description": "Standard employment contract",
"descriptionPl": "Standardowa umowa o pracę",
"fieldCount": 14
}
]
}GET /api/v1/templates/:templateId
Pobierz pełny schemat szablonu z definicją pól formularza. Użyj tego endpointu, aby poznać wymagane pola przed wygenerowaniem dokumentu.
Parametry ścieżki
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
templateId |
string | wymagany | Identyfikator szablonu, np. "umowa-najmu" |
Przykładowe zapytanie
curl "https://pismoszytenamiare.pl/api/v1/templates/umowa-najmu"
Przykładowa odpowiedź
{
"status": "success",
"data": {
"id": "umowa-najmu",
"name": "Rental Agreement",
"namePl": "Umowa najmu",
"category": "umowy",
"categoryPl": "Umowy",
"description": "Standard rental/lease agreement",
"descriptionPl": "Standardowa umowa najmu lokalu",
"fields": [
{
"name": "landlordName",
"label": "Imię i nazwisko wynajmującego",
"type": "text",
"required": true,
"placeholder": "Jan Kowalski"
},
{
"name": "landlordAddress",
"label": "Adres wynajmującego",
"type": "textarea",
"required": true,
"placeholder": "ul. Przykładowa 1, 00-001 Warszawa"
},
{
"name": "landlordPesel",
"label": "PESEL wynajmującego",
"type": "text",
"required": true,
"placeholder": "12345678901"
},
{
"name": "tenantName",
"label": "Imię i nazwisko najemcy",
"type": "text",
"required": true,
"placeholder": "Anna Nowak"
},
{
"name": "propertyAddress",
"label": "Adres lokalu",
"type": "textarea",
"required": true,
"placeholder": "ul. Mieszkalna 5/3, 00-002 Warszawa"
},
{
"name": "rentAmount",
"label": "Kwota czynszu (PLN)",
"type": "number",
"required": true,
"placeholder": "2500"
},
{
"name": "startDate",
"label": "Data rozpoczęcia",
"type": "date",
"required": true
},
{
"name": "endDate",
"label": "Data zakończenia",
"type": "date",
"required": false
},
{
"name": "depositAmount",
"label": "Kaucja (PLN)",
"type": "number",
"required": false,
"defaultValue": "0"
},
{
"name": "paymentDay",
"label": "Dzień płatności",
"type": "number",
"required": true,
"placeholder": "10",
"defaultValue": "10"
},
{
"name": "includeInventory",
"label": "Dołącz protokół zdawczo-odbiorczy",
"type": "checkbox",
"required": false,
"defaultValue": false
},
{
"name": "inventoryItems",
"label": "Elementy wyposażenia",
"type": "textarea",
"required": false,
"condition": "includeInventory === true",
"placeholder": "Lodówka, pralka, kuchenka..."
},
{
"name": "additionalTerms",
"label": "Dodatkowe postanowienia",
"type": "textarea",
"required": false
}
]
}
}Typy pól formularza
| Typ | Opis | Przykład |
|---|---|---|
text |
Jednowierszowe pole tekstowe | Imię i nazwisko, PESEL, NIP |
textarea |
Wielowierszowe pole tekstowe | Adres, opis, uwagi |
date |
Data w formacie YYYY-MM-DD | Data rozpoczęcia, data zawarcia |
number |
Wartość liczbowa | Kwota czynszu, kaucja |
select |
Wybór z listy opcji | Typ umowy, rodzaj wypowiedzenia |
checkbox |
Pole logiczne (tak/nie) | Dołącz załącznik, zgódź się na warunki |
POST /api/v1/documents/generate
Wygeneruj dokument PDF na podstawie wybranego szablonu i danych formularza. Odpowiedź zawiera plik binarny PDF.
Nagłówki
| Nagłówek | Wartość |
|---|---|
Content-Type |
application/json |
Treść zapytania (JSON)
| Pole | Typ | Wymagany | Opis |
|---|---|---|---|
templateId |
string | wymagany | Identyfikator szablonu (np. "umowa-najmu") |
data |
object | wymagany | Obiekt z wartościami pól formularza (klucze odpowiadają name z definicji pól) |
Przykładowe zapytanie
curl -X POST "https://pismoszytenamiare.pl/api/v1/documents/generate" \
-H "Content-Type: application/json" \
-d '{
"templateId": "umowa-najmu",
"data": {
"landlordName": "Jan Kowalski",
"landlordAddress": "ul. Przykładowa 1, 00-001 Warszawa",
"landlordPesel": "85010112345",
"tenantName": "Anna Nowak",
"propertyAddress": "ul. Mieszkalna 5/3, 00-002 Warszawa",
"rentAmount": 2500,
"startDate": "2026-03-01",
"endDate": "2027-02-28",
"depositAmount": 5000,
"paymentDay": 10,
"includeInventory": false
}
}' --output umowa-najmu.pdfOdpowiedź
| Nagłówek | Wartość |
|---|---|
Content-Type |
application/pdf |
Content-Disposition |
attachment; filename="umowa-najmu.pdf" |
Odpowiedź to binarny plik PDF. Zapisz go do pliku używając --output w cURL lub obsłuż blob w JavaScript.
Błędy
{
"status": "error",
"error": "Brakujące wymagane pola",
"message": "Następujące pola są wymagane: landlordName, tenantName, rentAmount",
"missingFields": ["landlordName", "tenantName", "rentAmount"]
}{
"status": "error",
"error": "Nie znaleziono szablonu",
"message": "Szablon o identyfikatorze 'nieistniejacy-szablon' nie istnieje"
}POST /api/v1/documents/preview
Podgląd dokumentu bez generowania pliku PDF. Zwraca strukturę dokumentu w formacie JSON z podziałem na sekcje. Użyteczne do walidacji danych przed wygenerowaniem PDF.
Treść zapytania (JSON)
Identyczna jak w endpointcie POST /documents/generate — pola templateId i data.
Przykładowe zapytanie
curl -X POST "https://pismoszytenamiare.pl/api/v1/documents/preview" \
-H "Content-Type: application/json" \
-d '{
"templateId": "umowa-najmu",
"data": {
"landlordName": "Jan Kowalski",
"landlordAddress": "ul. Przykładowa 1, 00-001 Warszawa",
"landlordPesel": "85010112345",
"tenantName": "Anna Nowak",
"propertyAddress": "ul. Mieszkalna 5/3, 00-002 Warszawa",
"rentAmount": 2500,
"startDate": "2026-03-01",
"paymentDay": 10
}
}'Przykładowa odpowiedź
{
"status": "success",
"data": {
"templateId": "umowa-najmu",
"templateName": "Umowa najmu",
"generatedAt": "2026-02-27T12:00:00.000Z",
"sections": [
{
"title": "Nagłówek",
"content": "UMOWA NAJMU LOKALU MIESZKALNEGO"
},
{
"title": "Strony umowy",
"content": "Zawarta w dniu 2026-03-01 pomiędzy:\n1. Jan Kowalski, zamieszkały/a: ul. Przykładowa 1, 00-001 Warszawa, PESEL: 85010112345 (Wynajmujący)\n2. Anna Nowak (Najemca)"
},
{
"title": "Przedmiot umowy",
"content": "Wynajmujący oddaje Najemcy do używania lokal mieszkalny położony pod adresem: ul. Mieszkalna 5/3, 00-002 Warszawa"
},
{
"title": "Czynsz",
"content": "Najemca zobowiązuje się płacić czynsz w wysokości 2500 PLN miesięcznie, do 10. dnia każdego miesiąca."
}
]
}
}Lista szablonów (11)
Poniżej znajduje się pełna lista dostępnych szablonów dokumentów, pogrupowanych według kategorii.
Umowy (6 szablonów)
| ID szablonu | Nazwa | Opis | Pola |
|---|---|---|---|
umowa-najmu |
Umowa najmu | Standardowa umowa najmu lokalu mieszkalnego. Zawiera dane stron, adres lokalu, kwotę czynszu, datę rozpoczęcia, kaucję, opcjonalny protokół zdawczo-odbiorczy. | 13 |
umowa-najmu-okazjonalny |
Umowa najmu okazjonalnego | Umowa najmu okazjonalnego zgodna z Art. 19a ustawy o ochronie praw lokatorów. Wymaga oświadczenia notarialnego najemcy o poddaniu się egzekucji oraz wskazania lokalu zastępczego. | 16 |
umowa-o-prace |
Umowa o pracę | Standardowa umowa o pracę na czas określony lub nieokreślony. Dane pracodawcy i pracownika, stanowisko, wynagrodzenie, wymiar czasu pracy, miejsce wykonywania pracy. | 14 |
umowa-zlecenie |
Umowa zlecenie | Umowa zlecenie (umowa cywilnoprawna). Dane zleceniodawcy i zleceniobiorcy, zakres zlecenia, wynagrodzenie, termin wykonania. | 12 |
umowa-o-dzielo |
Umowa o dzieło | Umowa o dzieło z określonym rezultatem. Dane zamawiającego i wykonawcy, opis dzieła, wynagrodzenie, termin oddania, prawa autorskie. | 11 |
umowa-kupna-sprzedazy |
Umowa kupna-sprzedaży | Ogólna umowa kupna-sprzedaży rzeczy ruchomych. Dane sprzedawcy i kupującego, opis przedmiotu, cena, sposób płatności, data wydania. | 12 |
Pisma (3 szablony)
| ID szablonu | Nazwa | Opis | Pola |
|---|---|---|---|
wypowiedzenie |
Wypowiedzenie umowy | Pismo wypowiadające umowę (najmu, pracy, usługi, ubezpieczenia itp.). Dane nadawcy i adresata, numer umowy, data zawarcia, powód wypowiedzenia, okres wypowiedzenia. | 10 |
reklamacja |
Reklamacja | Pismo reklamacyjne dotyczące towaru lub usługi. Dane reklamującego, dane sprzedawcy, opis produktu/usługi, opis wady, żądanie (wymiana, naprawa, zwrot). | 11 |
wezwanie-do-zaplaty |
Wezwanie do zapłaty | Przedsądowe wezwanie do zapłaty. Dane wierzyciela i dłużnika, kwota zaległości, tytuł zobowiązania, termin zapłaty, numer konta bankowego, informacja o konsekwencjach prawnych. | 12 |
Wnioski (2 szablony)
| ID szablonu | Nazwa | Opis | Pola |
|---|---|---|---|
pelnomocnictwo |
Pełnomocnictwo | Pełnomocnictwo ogólne lub szczególne. Dane mocodawcy i pełnomocnika, zakres umocowania, data ważności, możliwość substytucji. | 9 |
oswiadczenie |
Oświadczenie | Ogólne oświadczenie pisemne. Dane oświadczającego, treść oświadczenia, cel złożenia, data, podpis. | 7 |
Format odpowiedzi
Endpointy JSON zwracają odpowiedzi w ustandaryzowanym formacie. Endpoint /documents/generate zwraca binarny PDF.
Odpowiedź sukcesu (JSON)
{
"status": "success",
"data": { ... },
"count": 11
}Odpowiedź błędu
{
"status": "error",
"error": "Krótki opis błędu",
"message": "Szczegółowy opis problemu z informacją jak go rozwiązać"
}Kody błędów
| Status | Znaczenie | Kiedy występuje |
|---|---|---|
400 |
Bad Request — Nieprawidłowe zapytanie | Brakujące wymagane pola, nieprawidłowy format danych, brak templateId lub data w treści zapytania |
404 |
Not Found — Nie znaleziono | Nieprawidłowy templateId, nieistniejący endpoint |
429 |
Too Many Requests — Zbyt wiele zapytań | Przekroczony limit zapytań (30/min ogólne lub 10/min generowanie PDF) |
500 |
Internal Server Error — Błąd serwera | Nieoczekiwany błąd po stronie serwera. Jeśli się powtarza, zgłoś problem. |
Limity zapytań
API stosuje ograniczenia liczby zapytań w celu zapewnienia stabilności usługi:
| Limit | Wartość | Opis |
|---|---|---|
| Ogólny limit | 30 zapytań/min |
Dotyczy wszystkich endpointów (GET i POST) na adres IP |
| Generowanie PDF | 10 zapytań/min |
Dotyczy endpointu POST /documents/generate na adres IP |
| Okno czasowe | 60 sekund |
Przesuwne okno czasowe (sliding window) |
Po przekroczeniu limitu API zwraca status 429 z nagłówkiem Retry-After.
RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset.
Przykłady cURL
# Lista wszystkich szablonów
curl "https://pismoszytenamiare.pl/api/v1/templates"
# Szablony tylko z kategorii "umowy"
curl "https://pismoszytenamiare.pl/api/v1/templates?category=umowy"
# Pobierz schemat szablonu umowy najmu
curl "https://pismoszytenamiare.pl/api/v1/templates/umowa-najmu"
# Wygeneruj umowę najmu jako PDF
curl -X POST "https://pismoszytenamiare.pl/api/v1/documents/generate" \
-H "Content-Type: application/json" \
-d '{
"templateId": "umowa-najmu",
"data": {
"landlordName": "Jan Kowalski",
"landlordAddress": "ul. Przykładowa 1, 00-001 Warszawa",
"landlordPesel": "85010112345",
"tenantName": "Anna Nowak",
"propertyAddress": "ul. Mieszkalna 5/3, 00-002 Warszawa",
"rentAmount": 2500,
"startDate": "2026-03-01",
"endDate": "2027-02-28",
"depositAmount": 5000,
"paymentDay": 10,
"includeInventory": false
}
}' --output umowa-najmu.pdf
# Podgląd dokumentu (JSON)
curl -X POST "https://pismoszytenamiare.pl/api/v1/documents/preview" \
-H "Content-Type: application/json" \
-d '{
"templateId": "wezwanie-do-zaplaty",
"data": {
"creditorName": "Firma ABC Sp. z o.o.",
"debtorName": "XYZ Jan Nowak",
"amount": 15000,
"currency": "PLN",
"dueDate": "2026-01-15",
"paymentDeadline": "2026-03-15",
"bankAccount": "PL 12 3456 7890 1234 5678 9012 3456"
}
}'Przykłady JavaScript
const BASE_URL = 'https://pismoszytenamiare.pl/api/v1';
// Lista wszystkich szablonów
const templatesRes = await fetch(`${BASE_URL}/templates`);
const templates = await templatesRes.json();
console.log(`Dostępne szablony: ${templates.count}`);
// Pobierz schemat szablonu
const schemaRes = await fetch(`${BASE_URL}/templates/umowa-najmu`);
const schema = await schemaRes.json();
console.log('Pola formularza:', schema.data.fields);
// Wygeneruj PDF umowy najmu
const pdfRes = await fetch(`${BASE_URL}/documents/generate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
templateId: 'umowa-najmu',
data: {
landlordName: 'Jan Kowalski',
landlordAddress: 'ul. Przykładowa 1, 00-001 Warszawa',
landlordPesel: '85010112345',
tenantName: 'Anna Nowak',
propertyAddress: 'ul. Mieszkalna 5/3, 00-002 Warszawa',
rentAmount: 2500,
startDate: '2026-03-01',
endDate: '2027-02-28',
depositAmount: 5000,
paymentDay: 10,
includeInventory: false
}
})
});
// Zapisz PDF (Node.js)
const fs = await import('fs');
const buffer = Buffer.from(await pdfRes.arrayBuffer());
fs.writeFileSync('umowa-najmu.pdf', buffer);
console.log('PDF zapisany: umowa-najmu.pdf');
// Lub pobierz w przeglądarce
const blob = await pdfRes.blob();
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'umowa-najmu.pdf';
a.click();
// Podgląd dokumentu (JSON)
const previewRes = await fetch(`${BASE_URL}/documents/preview`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
templateId: 'umowa-najmu',
data: {
landlordName: 'Jan Kowalski',
tenantName: 'Anna Nowak',
propertyAddress: 'ul. Mieszkalna 5/3',
rentAmount: 2500,
startDate: '2026-03-01',
paymentDay: 10
}
})
});
const preview = await previewRes.json();
console.log('Sekcje dokumentu:', preview.data.sections);Przykłady Python
import requests
BASE_URL = "https://pismoszytenamiare.pl/api/v1"
# Lista wszystkich szablonów
response = requests.get(f"{BASE_URL}/templates")
templates = response.json()
print(f"Dostępne szablony: {templates['count']}")
# Filtruj szablony po kategorii
response = requests.get(f"{BASE_URL}/templates", params={"category": "umowy"})
umowy = response.json()
for t in umowy["data"]:
print(f" - {t['id']}: {t['namePl']}")
# Pobierz schemat szablonu
response = requests.get(f"{BASE_URL}/templates/umowa-najmu")
schema = response.json()
for field in schema["data"]["fields"]:
req = "wymagane" if field["required"] else "opcjonalne"
print(f" {field['name']} ({field['type']}) - {req}")
# Wygeneruj PDF umowy najmu
response = requests.post(
f"{BASE_URL}/documents/generate",
json={
"templateId": "umowa-najmu",
"data": {
"landlordName": "Jan Kowalski",
"landlordAddress": "ul. Przykładowa 1, 00-001 Warszawa",
"landlordPesel": "85010112345",
"tenantName": "Anna Nowak",
"propertyAddress": "ul. Mieszkalna 5/3, 00-002 Warszawa",
"rentAmount": 2500,
"startDate": "2026-03-01",
"endDate": "2027-02-28",
"depositAmount": 5000,
"paymentDay": 10,
"includeInventory": False,
},
},
)
# Zapisz PDF do pliku
with open("umowa-najmu.pdf", "wb") as f:
f.write(response.content)
print("PDF zapisany: umowa-najmu.pdf")
# Podgląd dokumentu (JSON)
response = requests.post(
f"{BASE_URL}/documents/preview",
json={
"templateId": "reklamacja",
"data": {
"complainantName": "Piotr Wiśniewski",
"sellerName": "Sklep Elektroniczny Sp. z o.o.",
"productName": "Laptop Model X200",
"purchaseDate": "2026-01-10",
"defectDescription": "Ekran migocze po 5 minutach użytkowania",
"demand": "wymiana",
},
},
)
preview = response.json()
for section in preview["data"]["sections"]:
print(f"\n--- {section['title']} ---")
print(section["content"])Integracja MCP (Claude Desktop)
Pisma Szyte Na Miarę obsługuje Model Context Protocol (MCP), co pozwala asystentom AI takim jak Claude, VS Code Copilot, Cursor i innym klientom MCP korzystać z API jako narzędzia. Poproś Claude: "Wygeneruj umowę najmu dla Jana Kowalskiego", a dokument PDF zostanie automatycznie utworzony.
Instalacja
Dodaj tę konfigurację do pliku klienta MCP (np. claude_desktop_config.json):
{
"mcpServers": {
"pismoszytenamiare": {
"command": "npx",
"args": ["-y", "pismoszytenamiare-mcp"]
}
}
}Dostępne narzędzia MCP
| Narzędzie | Opis | Parametry |
|---|---|---|
list_templates |
Pobierz listę dostępnych szablonów | category (opcjonalny) |
get_template |
Pobierz schemat szablonu z definicją pól | templateId (wymagany) |
generate_document |
Wygeneruj dokument PDF | templateId (wymagany), data (wymagany) |
preview_document |
Podgląd struktury dokumentu | templateId (wymagany), data (wymagany) |
Przykład użycia z Claude
Użytkownik: Wygeneruj umowę najmu. Wynajmujący: Jan Kowalski, ul. Polna 5, Warszawa, PESEL 85010112345. Najemca: Anna Nowak. Lokal: ul. Krótka 3/2, Warszawa. Czynsz: 3000 PLN, od 1 marca 2026. Claude: Generuję umowę najmu z podanymi danymi... [Używa narzędzia generate_document] Umowa najmu została wygenerowana. Oto plik PDF do pobrania.
Zmienne środowiskowe
| Zmienna | Wartość domyślna | Opis |
|---|---|---|
PISMOSZYTENAMIARE_BASE_URL |
https://pismoszytenamiare.pl |
Nadpisz bazowy adres URL API (np. dla instancji lokalnej) |