imzala 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- imzala-0.1.0/PKG-INFO +13 -0
- imzala-0.1.0/README.md +181 -0
- imzala-0.1.0/generated/imzala_client/__init__.py +221 -0
- imzala-0.1.0/generated/imzala_client/api/__init__.py +9 -0
- imzala-0.1.0/generated/imzala_client/api/account_api.py +288 -0
- imzala-0.1.0/generated/imzala_client/api/demands_api.py +3623 -0
- imzala-0.1.0/generated/imzala_client/api/reminders_api.py +345 -0
- imzala-0.1.0/generated/imzala_client/api/templates_api.py +1414 -0
- imzala-0.1.0/generated/imzala_client/api/timestamps_api.py +395 -0
- imzala-0.1.0/generated/imzala_client/api_client.py +805 -0
- imzala-0.1.0/generated/imzala_client/api_response.py +21 -0
- imzala-0.1.0/generated/imzala_client/configuration.py +631 -0
- imzala-0.1.0/generated/imzala_client/exceptions.py +219 -0
- imzala-0.1.0/generated/imzala_client/models/__init__.py +99 -0
- imzala-0.1.0/generated/imzala_client/models/api_error.py +93 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_get200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_get200_response_data.py +103 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_get200_response_data_demands_inner.py +120 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_cancel_post200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_cancel_post200_response_data.py +109 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_cancel_post_request.py +89 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_delete409_response.py +93 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_embed_session_post200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_embed_session_post200_response_data.py +94 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_embed_session_post_request.py +90 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_get200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_parties_party_id_resend_post200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_parties_party_id_resend_post200_response_data.py +89 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_reminders_post200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_reminders_post200_response_data.py +113 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_reminders_post200_response_data_dispatched_inner.py +107 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_reminders_post200_response_data_skipped_inner.py +92 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_reminders_post429_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_reminders_post429_response_error.py +103 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_timeline_get200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_timeline_get200_response_data.py +97 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_id_timeline_get200_response_data_events_inner.py +122 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_post201_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_demands_upload_post201_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_me_get200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_me_get200_response_data.py +108 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_me_get200_response_data_credits.py +89 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_me_get200_response_data_workspace.py +107 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_get200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_get200_response_data.py +103 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_get401_response.py +93 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_id_delete200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_id_delete200_response_data.py +92 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_id_get200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_id_get404_response.py +91 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_id_patch200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_id_patch200_response_data.py +106 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_id_patch_request.py +93 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_templates_id_usage_get200_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_timestamps_post201_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/api_v1_timestamps_post_request1.py +97 -0
- imzala-0.1.0/generated/imzala_client/models/create_demand_request.py +145 -0
- imzala-0.1.0/generated/imzala_client/models/created_demand.py +126 -0
- imzala-0.1.0/generated/imzala_client/models/created_demand_signing_urls_inner.py +110 -0
- imzala-0.1.0/generated/imzala_client/models/created_demand_upload.py +116 -0
- imzala-0.1.0/generated/imzala_client/models/demand_page.py +91 -0
- imzala-0.1.0/generated/imzala_client/models/demand_status.py +133 -0
- imzala-0.1.0/generated/imzala_client/models/demand_status_parties_inner.py +115 -0
- imzala-0.1.0/generated/imzala_client/models/page_item.py +151 -0
- imzala-0.1.0/generated/imzala_client/models/party_mapping_input.py +122 -0
- imzala-0.1.0/generated/imzala_client/models/party_mapping_input_variables_value.py +167 -0
- imzala-0.1.0/generated/imzala_client/models/reminder_settings.py +107 -0
- imzala-0.1.0/generated/imzala_client/models/standard_error.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/standard_error_error.py +100 -0
- imzala-0.1.0/generated/imzala_client/models/template_detail.py +130 -0
- imzala-0.1.0/generated/imzala_client/models/template_party_summary.py +96 -0
- imzala-0.1.0/generated/imzala_client/models/template_summary.py +118 -0
- imzala-0.1.0/generated/imzala_client/models/template_summary_parties_inner.py +96 -0
- imzala-0.1.0/generated/imzala_client/models/template_usage.py +127 -0
- imzala-0.1.0/generated/imzala_client/models/template_usage_endpoint.py +91 -0
- imzala-0.1.0/generated/imzala_client/models/template_usage_example_request.py +91 -0
- imzala-0.1.0/generated/imzala_client/models/template_usage_parties_inner.py +106 -0
- imzala-0.1.0/generated/imzala_client/models/template_usage_parties_inner_supported_fields_inner.py +102 -0
- imzala-0.1.0/generated/imzala_client/models/template_usage_variables_inner.py +113 -0
- imzala-0.1.0/generated/imzala_client/models/template_variable.py +119 -0
- imzala-0.1.0/generated/imzala_client/models/timestamp_record.py +105 -0
- imzala-0.1.0/generated/imzala_client/models/trigger_reminder_request.py +102 -0
- imzala-0.1.0/generated/imzala_client/models/upsert_items_request.py +99 -0
- imzala-0.1.0/generated/imzala_client/models/upsert_items_response.py +95 -0
- imzala-0.1.0/generated/imzala_client/models/upsert_items_response_data.py +99 -0
- imzala-0.1.0/generated/imzala_client/models/upsert_items_response_data_items_inner.py +132 -0
- imzala-0.1.0/generated/imzala_client/models/webhook_data_demand_completed.py +116 -0
- imzala-0.1.0/generated/imzala_client/models/webhook_data_demand_completed_parties_inner.py +107 -0
- imzala-0.1.0/generated/imzala_client/models/webhook_data_demand_created.py +94 -0
- imzala-0.1.0/generated/imzala_client/models/webhook_data_demand_expired.py +105 -0
- imzala-0.1.0/generated/imzala_client/models/webhook_data_demand_expired_parties_inner.py +101 -0
- imzala-0.1.0/generated/imzala_client/models/webhook_data_party_rejected.py +99 -0
- imzala-0.1.0/generated/imzala_client/models/webhook_data_party_rejected_party.py +108 -0
- imzala-0.1.0/generated/imzala_client/models/webhook_data_party_signed.py +94 -0
- imzala-0.1.0/generated/imzala_client/models/webhook_data_party_viewed.py +92 -0
- imzala-0.1.0/generated/imzala_client/models/webhook_envelope.py +114 -0
- imzala-0.1.0/generated/imzala_client/py.typed +0 -0
- imzala-0.1.0/generated/imzala_client/rest.py +264 -0
- imzala-0.1.0/imzala/__init__.py +33 -0
- imzala-0.1.0/imzala/client.py +581 -0
- imzala-0.1.0/imzala/errors.py +197 -0
- imzala-0.1.0/imzala/files.py +57 -0
- imzala-0.1.0/imzala/py.typed +0 -0
- imzala-0.1.0/imzala/webhook.py +69 -0
- imzala-0.1.0/imzala.egg-info/PKG-INFO +13 -0
- imzala-0.1.0/imzala.egg-info/SOURCES.txt +115 -0
- imzala-0.1.0/imzala.egg-info/dependency_links.txt +1 -0
- imzala-0.1.0/imzala.egg-info/requires.txt +7 -0
- imzala-0.1.0/imzala.egg-info/top_level.txt +2 -0
- imzala-0.1.0/pyproject.toml +44 -0
- imzala-0.1.0/setup.cfg +4 -0
- imzala-0.1.0/tests/test_client.py +162 -0
- imzala-0.1.0/tests/test_errors.py +102 -0
- imzala-0.1.0/tests/test_lifecycle.py +199 -0
- imzala-0.1.0/tests/test_pagination.py +79 -0
- imzala-0.1.0/tests/test_retry.py +194 -0
- imzala-0.1.0/tests/test_webhook.py +66 -0
imzala-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: imzala
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Official server-side SDK for the imzala.org External API (typed facade over a generated urllib3/pydantic client).
|
|
5
|
+
Author-email: imzala Destek <destek@imzala.org>
|
|
6
|
+
License: Proprietary
|
|
7
|
+
Requires-Python: >=3.9
|
|
8
|
+
Requires-Dist: urllib3<3.0.0,>=2.1.0
|
|
9
|
+
Requires-Dist: python-dateutil>=2.8.2
|
|
10
|
+
Requires-Dist: pydantic>=2.11
|
|
11
|
+
Requires-Dist: typing-extensions>=4.7.1
|
|
12
|
+
Provides-Extra: dev
|
|
13
|
+
Requires-Dist: pytest>=7.2.1; extra == "dev"
|
imzala-0.1.0/README.md
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# imzala (Python)
|
|
2
|
+
|
|
3
|
+
İmzala dijital imza platformu resmi Python SDK'sı.
|
|
4
|
+
|
|
5
|
+
> ⚠️ Geliştirme aşamasında, yayın öncesi avukat onayı bekliyor. Kapsam ve
|
|
6
|
+
> yayın kararları için monorepo kökündeki [RELEASING.md](../../RELEASING.md).
|
|
7
|
+
|
|
8
|
+
## Kurulum
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pip install imzala
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Python 3.9+ gerektirir.
|
|
15
|
+
|
|
16
|
+
## Hızlı başlangıç
|
|
17
|
+
|
|
18
|
+
```python
|
|
19
|
+
import os
|
|
20
|
+
from imzala import Imzala
|
|
21
|
+
|
|
22
|
+
client = Imzala(api_key=os.environ["IMZALA_API_KEY"])
|
|
23
|
+
|
|
24
|
+
# Aktif şablonlarını listele
|
|
25
|
+
templates = client.templates.list()
|
|
26
|
+
|
|
27
|
+
# Bir şablondan yeni sözleşme (demand) oluştur
|
|
28
|
+
demand = client.demands.create({
|
|
29
|
+
"template_id": templates["templates"][0]["id"],
|
|
30
|
+
"party_mapping": [
|
|
31
|
+
{
|
|
32
|
+
"template_party_id": templates["templates"][0]["parties"][0]["id"],
|
|
33
|
+
"first_name": "Ahmet",
|
|
34
|
+
"last_name": "Yılmaz",
|
|
35
|
+
"email": "ahmet@example.com",
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
print(demand["signing_urls"]) # her taraf için imzalama linki
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`base_url` varsayılan olarak `https://api-prd.imzala.org`'dur; test ortamı
|
|
44
|
+
için `Imzala(api_key=..., base_url="https://test-api.imzala.org")`.
|
|
45
|
+
|
|
46
|
+
## Kaynaklar
|
|
47
|
+
|
|
48
|
+
- `client.templates.list(page=None, limit=None)` / `.get(template_id)` /
|
|
49
|
+
`.usage(template_id)` / `.list_all(page=None, limit=None)` (bkz. aşağıdaki
|
|
50
|
+
sayfalama notu)
|
|
51
|
+
- `client.demands.create(body)` / `.get(demand_id)` /
|
|
52
|
+
`.add_items(demand_id, body)` /
|
|
53
|
+
`.upload_document(files=[...], parties=[...], order=None, title=None, description=None)` /
|
|
54
|
+
`.send_reminder(demand_id, body=None)`
|
|
55
|
+
- `client.embed.create_session(demand_id, party_id=...)`: bkz. aşağıdaki
|
|
56
|
+
gömülü imza notu
|
|
57
|
+
- `client.timestamps.create(content=..., filename=..., idempotency_key=None, ...)`
|
|
58
|
+
- `client.me()`: API anahtarının sahibi (id, e-posta, workspace, kalan kredi)
|
|
59
|
+
|
|
60
|
+
Dosya yükleyen metodlar `FileInput` (dataclass: `content: bytes, filename: str,
|
|
61
|
+
content_type: Optional[str]`) veya doğrudan `content=`/`filename=` keyword'lerini
|
|
62
|
+
kabul eder; Flask/FastAPI upload'larından gelen bytes'ı doğrudan geçebilirsiniz.
|
|
63
|
+
|
|
64
|
+
## Otomatik yeniden deneme (safe auto-retry)
|
|
65
|
+
|
|
66
|
+
Yalnızca **idempotent GET** metodları (`templates.list` / `.get` /
|
|
67
|
+
`.usage`, `demands.get`, `me()`) 429 (rate limit — `Retry-After`
|
|
68
|
+
header'ına uyar) veya 5xx (sunucu hatası) aldığında, exponential backoff +
|
|
69
|
+
jitter ile otomatik olarak yeniden denenir:
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
client = Imzala(
|
|
73
|
+
api_key=os.environ["IMZALA_API_KEY"],
|
|
74
|
+
max_retries=2, # varsayılan 2 deneme; 0 = kapalı
|
|
75
|
+
retry_base_delay=0.3, # saniye cinsinden taban gecikme, varsayılan 0.3 (300ms)
|
|
76
|
+
)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**🔴 Güvenlik:** `demands.create` / `.add_items` / `.upload_document` /
|
|
80
|
+
`.send_reminder`, `embed.create_session`, `timestamps.create` gibi
|
|
81
|
+
**yazma (POST)** metodları **hiçbir zaman** otomatik yeniden denenmez —
|
|
82
|
+
tekrarlanan bir `create` çağrısı **mükerrer sözleşme** oluşturur,
|
|
83
|
+
tekrarlanan bir `send_reminder` ise **çift SMS/e-posta** gönderir. Bu
|
|
84
|
+
davranış `max_retries` ile değiştirilemez: yeniden deneme sarmalayıcısı
|
|
85
|
+
yalnızca GET çağrılarına uygulanır, POST/PUT/PATCH/DELETE çağıran
|
|
86
|
+
metodların bu sarmalayıcıya girme yolu yoktur.
|
|
87
|
+
|
|
88
|
+
## Sayfalama iterator'ü
|
|
89
|
+
|
|
90
|
+
`templates.list()` tek sayfa döner; aktif tüm şablonlarınızı tek tek
|
|
91
|
+
dolaşmak için `list_all()` kullanın. Dahili olarak `list(page=, limit=)`
|
|
92
|
+
çağrısını tekrarlayıp `page`'i artırır; sayfa kısa geldiğinde (istenen
|
|
93
|
+
sayıdan az öğe) veya cevaptaki `total`'a ulaşıldığında durur — bu yüzden
|
|
94
|
+
sonsuz döngü riski yoktur:
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
for template in client.templates.list_all():
|
|
98
|
+
print(template["id"], template["name"])
|
|
99
|
+
|
|
100
|
+
# page/limit override edilebilir:
|
|
101
|
+
for template in client.templates.list_all(limit=50):
|
|
102
|
+
...
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Webhook doğrulama
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
from flask import Flask, request, abort
|
|
109
|
+
from imzala import verify_webhook
|
|
110
|
+
import os
|
|
111
|
+
|
|
112
|
+
app = Flask(__name__)
|
|
113
|
+
|
|
114
|
+
@app.post("/webhooks/imzala")
|
|
115
|
+
def imzala_webhook():
|
|
116
|
+
raw_body = request.get_data() # ham body, JSON parse ETMEDEN önce
|
|
117
|
+
valid = verify_webhook(
|
|
118
|
+
os.environ["IMZALA_WEBHOOK_SECRET"],
|
|
119
|
+
raw_body,
|
|
120
|
+
request.headers.get("X-Imzala-Signature-256"),
|
|
121
|
+
)
|
|
122
|
+
if not valid:
|
|
123
|
+
abort(401)
|
|
124
|
+
|
|
125
|
+
event = request.get_json()
|
|
126
|
+
# ... event["type"]'a göre işle
|
|
127
|
+
return "", 200
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
`verify_webhook` asla exception fırlatmaz; geçersiz/eksik imzada `False`
|
|
131
|
+
döner. Body'yi parse edip yeniden serialize etmeyin (FastAPI için
|
|
132
|
+
`await request.body()`, Django için `request.body`).
|
|
133
|
+
|
|
134
|
+
## Hata yönetimi
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
from imzala import (
|
|
138
|
+
Imzala,
|
|
139
|
+
ImzalaError,
|
|
140
|
+
ImzalaAuthError,
|
|
141
|
+
ImzalaRateLimitError,
|
|
142
|
+
ImzalaValidationError,
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
try:
|
|
146
|
+
client.demands.get(demand_id)
|
|
147
|
+
except ImzalaRateLimitError as err:
|
|
148
|
+
print(f"Rate limit: {err.retry_after} sn sonra tekrar dene")
|
|
149
|
+
except ImzalaAuthError:
|
|
150
|
+
print("API anahtarı geçersiz veya yetkisiz")
|
|
151
|
+
except ImzalaValidationError as err:
|
|
152
|
+
print("İstek doğrulanamadı:", err.body)
|
|
153
|
+
except ImzalaError as err:
|
|
154
|
+
print("İmzala API hatası:", err.status_code, str(err))
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Tüm hatalar `ImzalaError`'dan türer (`status_code`, `body`, `code` alanları
|
|
158
|
+
ortak); 401/403 → `ImzalaAuthError`, 429 → `ImzalaRateLimitError`
|
|
159
|
+
(`retry_after` saniye), 422 → `ImzalaValidationError`.
|
|
160
|
+
|
|
161
|
+
## ⚠️ Sunucu-taraflı
|
|
162
|
+
|
|
163
|
+
Bu paket **sadece sunucuda** kullanılır. API anahtarınızı tarayıcı
|
|
164
|
+
JavaScript'ine veya mobil uygulamaya asla gömmeyin: sızarsa hesabınızdaki
|
|
165
|
+
tüm sözleşme/şablon/zaman damgası işlemlerine erişim kazanılır. Tarayıcıda
|
|
166
|
+
imza almak için [`@imzala/embed`](../embed) veya
|
|
167
|
+
[`@imzala/embed-react`](../embed-react) kullanın.
|
|
168
|
+
|
|
169
|
+
## İmza sınıfı notu
|
|
170
|
+
|
|
171
|
+
İmzala dijital imza (SES) üretir; her imza zaman damgalıdır. Nitelikli/
|
|
172
|
+
güvenli elektronik imza (QES) DEĞİLDİR.
|
|
173
|
+
|
|
174
|
+
`client.embed.create_session(...)` şu an **yalnızca test ortamında** çalışır;
|
|
175
|
+
gömülü imza özelliği henüz avukat onaylı prod-canlı değildir. Kapsam kararı
|
|
176
|
+
[RELEASING.md](../../RELEASING.md)'de.
|
|
177
|
+
|
|
178
|
+
## Daha fazla
|
|
179
|
+
|
|
180
|
+
- [Monorepo README](../../README.md): tüm paketler + genel desen
|
|
181
|
+
- [RELEASING.md](../../RELEASING.md): sürüm yayınlama, kapsam kararları
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
# flake8: noqa
|
|
4
|
+
|
|
5
|
+
"""
|
|
6
|
+
imzala External API
|
|
7
|
+
|
|
8
|
+
imzala.org dış API'si — şablondan sözleşme oluşturma ve takip. **Sürüm:** 1.6.0 · **Son güncelleme:** 2026-06-30 ## Auth Tüm istekler `X-API-Key` header'ı gerektirir. API key dashboard üzerinden oluşturulur: **API & Geliştirici** sayfası (https://app.imzala.org/developer) veya **Hesap Ayarları -> API Anahtarları**. ## Workspace (organizasyon) Organizasyon içinde oluşturulmuş bir API key kullanıyorsanız `X-Workspace-Id` header'ı göndermeniz gerekir (organizasyon UUID'si). Kişisel anahtarlar için bu header gerekmez. ## Multi-Party Variables (parti-bazlı ve ortak field'lar) `POST /api/v1/demands` payload'ında iki tip \"variables\" alanı vardır: - `party_mapping[i].variables` — **bu partiye ait** field'lar (örn. Kira sözleşmesinde Kiraya Veren'in `address`, `iban` field'ları) - `variables` (root) — **partilerden bağımsız** field'lar (örn. `kira_baslangic_tarihi`, `kira_bedeli`) Resolution sırası: 1. Item'ın template_party_id'si var ve o parti slug'ı göndermişse → uygula 2. Yoksa root `variables`'tan ara → varsa uygula 3. Yoksa atla Dashboard'daki **API Kullanımı** tab'ı (`/sablonlar/<id>`) hangi field'in hangi gruba gittiğini gösterir. Veya yeni `GET /api/v1/templates/{id}/usage` endpoint'i aynı bilgiyi JSON olarak döner. ## Sessiz Başarısızlık Yok `POST /api/v1/demands` cevabında `variables_ignored` array'ı, gönderdiğiniz ama şablonda eşleşmeyen slug'ları listeler. Boş olmadığında yazım hatası yapmışsınız demektir — log'ta veya dashboard'da kontrol edin. ## Rate Limit - 60 istek/dakika per API key - Aşılırsa 429 döner ## Hatalar Standart HTTP kodları: 400 (geçersiz veri), 401 (auth), 403 (yetki), 404 (yok), 429 (rate limit), 500 (sunucu) ## Loglar Tüm API istekleriniz dashboard'da `Geliştirici -> Etkinlik Logu` sayfasında görünür (request body, response body, headers, status code, süre). 30 gün retention. ## Hatırlatma Sistemi İmzalanmamış taraflara hatırlatma SMS/e-posta'sı **iki yolla** gönderilir: **1. Otomatik (scheduled) hatırlatmalar — şablona/sözleşmeye gömülü** Şablon (Template) seviyesinde `reminder_settings` (interval saatleri, max sayısı, kanallar) tanımlayabilirsiniz. Şablondan demand oluştururken bu değerler yeni sözleşmenin `ReminderConfig` satırına otomatik kopyalanır ve BullMQ worker'ı zamanı geldiğinde sessiz şekilde hatırlatır. - Dashboard editörden ayarlanır: `app.imzala.org/sablonlar/<id>/duzenle` → **Sözleşme Ayarları** → **Otomatik Hatırlatma** + **Hatırlatma Kanalı** - Veya `POST /api/v1/demands` çağrısında body'de `reminder_settings` alanıyla **bu sözleşme için override** edebilirsiniz (şablon default'unu ezer, sadece bu demand'a uygulanır) - Default: `{enabled: true, intervals_hours: [48], max_reminders: 1, channels: [\"email\"]}` **2. Manuel (anlık) hatırlatma — tetikleme endpoint'i** `POST /api/v1/demands/{id}/reminders` ile **şu an** SMS/e-posta hatırlatması gönderebilirsiniz. Anti-spam: Aynı sözleşme için son hatırlatmadan 5 dakika geçmemişse 429 `RATE_LIMITED` döner; `force: true` ile override edilebilir. **Kişi başına sert sınırlar (override edilemez):** - Bir kişiye en fazla 3 SMS reminder gönderilebilir (otomatik scheduled + manuel trigger toplam). - Bir kişiye en fazla 3 e-posta reminder gönderilebilir. - Sınıra ulaşan kişi response'un `details[]` listesinde `skipped` olarak görünür (`reason: \"party_sms_cap_reached (3)\"` veya `\"party_email_cap_reached (3)\"`); diğer kişilere gönderim devam eder. - `force: true` bu kişi-başı sınırları override etmez. ```bash # Default — SMS + e-posta birlikte (parti eligibility'sine göre) curl -X POST https://api-prd.imzala.org/api/v1/demands/<demand_id>/reminders \\ -H \"X-API-Key: imz_...\" \\ -H \"Content-Type: application/json\" -d '{}' # Sadece SMS, anti-spam override curl -X POST https://api-prd.imzala.org/api/v1/demands/<demand_id>/reminders \\ -H \"X-API-Key: imz_...\" \\ -H \"Content-Type: application/json\" \\ -d '{\"channels\": [\"sms\"], \"force\": true}' ``` Detay için **Reminders** tag'i altındaki endpoint'e bakın. ## Webhooks imzala olay gerçekleştiğinde (sözleşme tamamlandı, taraf imzaladı vb.) sizin belirlediğiniz HTTPS URL'ye `POST` ile JSON payload gönderir. Webhook'lar dashboard'dan yönetilir: **Ayarlar -> Webhook'lar** (https://app.imzala.org/settings/webhooks). API üzerinden CRUD desteklenmez. ### Workspace kapsamı - **Organizasyon webhook'u** (org workspace'inde oluşturulduysa) → o organizasyon altındaki TÜM üyelerin event'lerinde tetiklenir - **Kişisel webhook** (kişisel workspace'te) → sadece sizin kendi event'lerinizde tetiklenir ### Olay tipleri (6) | Olay | Tetikleyici | |------|-------------| | `demand.created` | Yeni sözleşme oluşturuldu | | `demand.completed` | Tüm taraflar imzaladı | | `demand.expired` | Sözleşme süresi doldu | | `party.signed` | Bir taraf imzaladı | | `party.viewed` | Bir taraf imza sayfasını ilk kez açtı | | `party.rejected` | Bir taraf reddetti | ### Header'lar Her istekte aşağıdaki header'lar gönderilir: ``` Content-Type: application/json User-Agent: Imzala-Webhook/1.0 X-Imzala-Event: <olay tipi, örn. demand.completed> X-Imzala-Delivery: <delivery UUID — idempotency key> X-Imzala-Signature-256: sha256=<HMAC-SHA256 hex> ``` ### Payload zarfı Tüm olaylar aynı zarfı kullanır: ```json { \"id\": \"evt_abc123...\", \"type\": \"demand.completed\", \"created_at\": \"2026-05-07T08:30:00.000Z\", \"data\": { \"...olay-özel alanlar...\" } } ``` - `id` — `evt_<32-hex>`. Idempotency için kullanın (DB'de unique key). - `type` — yukarıdaki 6 olay tipinden biri (lowercase). - `created_at` — olay zamanı (ISO 8601 UTC). - `data` — her olaya özel (aşağıda her olay için ayrı şema). ### İmza doğrulama (HMAC-SHA256) Webhook oluşturduğunuzda dashboard size `whsec_<64-hex>` formatında bir secret döner — **sadece bir kez gösterilir**, güvenli yere kaydedin. Her isteğin ham gövdesi (body) bu secret ile HMAC-SHA256 imzalanır ve `X-Imzala-Signature-256: sha256=<hex>` header'ında gönderilir. Doğrulama Node.js örneği: ```js const crypto = require('crypto'); function verify(rawBody, header, secret) { const expected = 'sha256=' + crypto .createHmac('sha256', secret) .update(rawBody, 'utf8') .digest('hex'); return crypto.timingSafeEqual( Buffer.from(header || '', 'utf8'), Buffer.from(expected, 'utf8') ); } // Express app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => { const sig = req.header('X-Imzala-Signature-256'); if (!verify(req.body, sig, process.env.IMZALA_WEBHOOK_SECRET)) { return res.status(401).send('invalid signature'); } const event = JSON.parse(req.body.toString('utf8')); // ... event'i kuyruğa koy ve hemen 2xx dön res.status(200).send('ok'); }); ``` > **Önemli:** Body'yi parse etmeden ham byte üzerinden imzalayın. Çoğu > framework (Express, FastAPI vs.) \"raw body\" middleware'i sağlar. ### Yeniden deneme politikası - **Başarı:** HTTP 2xx — delivery `SENT` olarak işaretlenir. - **Başarısızlık:** 2xx dışı veya bağlantı hatası — yeniden denenir. - **Per-attempt timeout:** 10 saniye (yapılandırılabilir env: `WEBHOOK_TIMEOUT_MS`). - **Maksimum deneme:** 6 (ilk + 5 retry). - **Backoff (exponential):** 30s → 2dk → 10dk → 30dk → 2sa. - **Tükenirse:** delivery `DEAD_LETTER` olur, dashboard'dan manuel \"Tekrar Gönder\" mümkün. Endpoint'iniz **10 saniyeden kısa sürede 2xx dönmelidir**. Ağır işleri (DB yazma, e-posta vs.) async kuyruğa atın. ### Idempotency Aynı olay birden fazla kez gönderilebilir (network retry, manuel redeliver, backfill). Receiver tarafında **`payload.id`** unique olduğu için bunu DB'de tek seferlik kayıt için kullanın: ```sql CREATE TABLE imzala_webhook_seen ( event_id TEXT PRIMARY KEY, received_at TIMESTAMPTZ DEFAULT now() ); -- INSERT ... ON CONFLICT DO NOTHING; sonuç 0 satır ise zaten gördük → skip ``` ### Backfill flag Geçmiş olayları yeniden tetiklemek (örn. webhook bug fix'inden sonra kayıp event'leri yakalamak) için bazı payload'larda `data._backfill: true` bayrağı bulunur. Bu durumda receiver: - Loglama için kayıt edebilir - Side-effect tetikleyicilerini (ödeme, e-posta gönderme, vs.) **atlamalı** - `id` zaten görülmüşse normal flow'a devam edebilir ```js if (event.data._backfill === true) { await logReplay(event); return res.status(200).send('replay accepted'); } ``` ### Manuel yeniden gönderim Dashboard'da `Ayarlar -> Webhook'lar -> <webhook> -> Teslim Geçmişi`: - Her satırda **Tekrar Gönder** butonu (PENDING dışında her statü için) - Üstte **Son 5'i Tekrar Gönder** toplu butonu (max 50 değiştirilebilir) - Yeni delivery kaydı oluşur, orijinali bozmaz (audit trail korunur) ### En iyi pratikler 1. Aynı `id`'yi tekrar görürseniz işlemi atla (idempotency). 2. İmzayı **timing-safe compare** ile doğrula (string equality değil). 3. 10sn'den hızlı 2xx dön; ağır işi kuyruğa at. 4. `_backfill: true` payload'larda side-effect'leri atla. 5. `X-Imzala-Delivery` UUID'sini log'la — destek talebinde bizimkiyle eşleşmesini kolaylaştırır. 6. HTTPS endpoint kullan; secret'i env var'da sakla, koda gömme.
|
|
9
|
+
|
|
10
|
+
The version of the OpenAPI document: 1.7.0
|
|
11
|
+
Contact: destek@imzala.org
|
|
12
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
13
|
+
|
|
14
|
+
Do not edit the class manually.
|
|
15
|
+
""" # noqa: E501
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
__version__ = "1.0.0"
|
|
19
|
+
|
|
20
|
+
# Define package exports
|
|
21
|
+
__all__ = [
|
|
22
|
+
"AccountApi",
|
|
23
|
+
"DemandsApi",
|
|
24
|
+
"RemindersApi",
|
|
25
|
+
"TemplatesApi",
|
|
26
|
+
"TimestampsApi",
|
|
27
|
+
"ApiResponse",
|
|
28
|
+
"ApiClient",
|
|
29
|
+
"Configuration",
|
|
30
|
+
"OpenApiException",
|
|
31
|
+
"ApiTypeError",
|
|
32
|
+
"ApiValueError",
|
|
33
|
+
"ApiKeyError",
|
|
34
|
+
"ApiAttributeError",
|
|
35
|
+
"ApiException",
|
|
36
|
+
"ApiError",
|
|
37
|
+
"ApiV1DemandsGet200Response",
|
|
38
|
+
"ApiV1DemandsGet200ResponseData",
|
|
39
|
+
"ApiV1DemandsGet200ResponseDataDemandsInner",
|
|
40
|
+
"ApiV1DemandsIdCancelPost200Response",
|
|
41
|
+
"ApiV1DemandsIdCancelPost200ResponseData",
|
|
42
|
+
"ApiV1DemandsIdCancelPostRequest",
|
|
43
|
+
"ApiV1DemandsIdDelete409Response",
|
|
44
|
+
"ApiV1DemandsIdEmbedSessionPost200Response",
|
|
45
|
+
"ApiV1DemandsIdEmbedSessionPost200ResponseData",
|
|
46
|
+
"ApiV1DemandsIdEmbedSessionPostRequest",
|
|
47
|
+
"ApiV1DemandsIdGet200Response",
|
|
48
|
+
"ApiV1DemandsIdPartiesPartyIdResendPost200Response",
|
|
49
|
+
"ApiV1DemandsIdPartiesPartyIdResendPost200ResponseData",
|
|
50
|
+
"ApiV1DemandsIdRemindersPost200Response",
|
|
51
|
+
"ApiV1DemandsIdRemindersPost200ResponseData",
|
|
52
|
+
"ApiV1DemandsIdRemindersPost200ResponseDataDispatchedInner",
|
|
53
|
+
"ApiV1DemandsIdRemindersPost200ResponseDataSkippedInner",
|
|
54
|
+
"ApiV1DemandsIdRemindersPost429Response",
|
|
55
|
+
"ApiV1DemandsIdRemindersPost429ResponseError",
|
|
56
|
+
"ApiV1DemandsIdTimelineGet200Response",
|
|
57
|
+
"ApiV1DemandsIdTimelineGet200ResponseData",
|
|
58
|
+
"ApiV1DemandsIdTimelineGet200ResponseDataEventsInner",
|
|
59
|
+
"ApiV1DemandsPost201Response",
|
|
60
|
+
"ApiV1DemandsUploadPost201Response",
|
|
61
|
+
"ApiV1MeGet200Response",
|
|
62
|
+
"ApiV1MeGet200ResponseData",
|
|
63
|
+
"ApiV1MeGet200ResponseDataCredits",
|
|
64
|
+
"ApiV1MeGet200ResponseDataWorkspace",
|
|
65
|
+
"ApiV1TemplatesGet200Response",
|
|
66
|
+
"ApiV1TemplatesGet200ResponseData",
|
|
67
|
+
"ApiV1TemplatesGet401Response",
|
|
68
|
+
"ApiV1TemplatesIdDelete200Response",
|
|
69
|
+
"ApiV1TemplatesIdDelete200ResponseData",
|
|
70
|
+
"ApiV1TemplatesIdGet200Response",
|
|
71
|
+
"ApiV1TemplatesIdGet404Response",
|
|
72
|
+
"ApiV1TemplatesIdPatch200Response",
|
|
73
|
+
"ApiV1TemplatesIdPatch200ResponseData",
|
|
74
|
+
"ApiV1TemplatesIdPatchRequest",
|
|
75
|
+
"ApiV1TemplatesIdUsageGet200Response",
|
|
76
|
+
"ApiV1TimestampsPost201Response",
|
|
77
|
+
"ApiV1TimestampsPostRequest1",
|
|
78
|
+
"CreateDemandRequest",
|
|
79
|
+
"CreatedDemand",
|
|
80
|
+
"CreatedDemandSigningUrlsInner",
|
|
81
|
+
"CreatedDemandUpload",
|
|
82
|
+
"DemandPage",
|
|
83
|
+
"DemandStatus",
|
|
84
|
+
"DemandStatusPartiesInner",
|
|
85
|
+
"PageItem",
|
|
86
|
+
"PartyMappingInput",
|
|
87
|
+
"PartyMappingInputVariablesValue",
|
|
88
|
+
"ReminderSettings",
|
|
89
|
+
"StandardError",
|
|
90
|
+
"StandardErrorError",
|
|
91
|
+
"TemplateDetail",
|
|
92
|
+
"TemplatePartySummary",
|
|
93
|
+
"TemplateSummary",
|
|
94
|
+
"TemplateSummaryPartiesInner",
|
|
95
|
+
"TemplateUsage",
|
|
96
|
+
"TemplateUsageEndpoint",
|
|
97
|
+
"TemplateUsageExampleRequest",
|
|
98
|
+
"TemplateUsagePartiesInner",
|
|
99
|
+
"TemplateUsagePartiesInnerSupportedFieldsInner",
|
|
100
|
+
"TemplateUsageVariablesInner",
|
|
101
|
+
"TemplateVariable",
|
|
102
|
+
"TimestampRecord",
|
|
103
|
+
"TriggerReminderRequest",
|
|
104
|
+
"UpsertItemsRequest",
|
|
105
|
+
"UpsertItemsResponse",
|
|
106
|
+
"UpsertItemsResponseData",
|
|
107
|
+
"UpsertItemsResponseDataItemsInner",
|
|
108
|
+
"WebhookDataDemandCompleted",
|
|
109
|
+
"WebhookDataDemandCompletedPartiesInner",
|
|
110
|
+
"WebhookDataDemandCreated",
|
|
111
|
+
"WebhookDataDemandExpired",
|
|
112
|
+
"WebhookDataDemandExpiredPartiesInner",
|
|
113
|
+
"WebhookDataPartyRejected",
|
|
114
|
+
"WebhookDataPartyRejectedParty",
|
|
115
|
+
"WebhookDataPartySigned",
|
|
116
|
+
"WebhookDataPartyViewed",
|
|
117
|
+
"WebhookEnvelope",
|
|
118
|
+
]
|
|
119
|
+
|
|
120
|
+
# import apis into sdk package
|
|
121
|
+
from imzala_client.api.account_api import AccountApi as AccountApi
|
|
122
|
+
from imzala_client.api.demands_api import DemandsApi as DemandsApi
|
|
123
|
+
from imzala_client.api.reminders_api import RemindersApi as RemindersApi
|
|
124
|
+
from imzala_client.api.templates_api import TemplatesApi as TemplatesApi
|
|
125
|
+
from imzala_client.api.timestamps_api import TimestampsApi as TimestampsApi
|
|
126
|
+
|
|
127
|
+
# import ApiClient
|
|
128
|
+
from imzala_client.api_response import ApiResponse as ApiResponse
|
|
129
|
+
from imzala_client.api_client import ApiClient as ApiClient
|
|
130
|
+
from imzala_client.configuration import Configuration as Configuration
|
|
131
|
+
from imzala_client.exceptions import OpenApiException as OpenApiException
|
|
132
|
+
from imzala_client.exceptions import ApiTypeError as ApiTypeError
|
|
133
|
+
from imzala_client.exceptions import ApiValueError as ApiValueError
|
|
134
|
+
from imzala_client.exceptions import ApiKeyError as ApiKeyError
|
|
135
|
+
from imzala_client.exceptions import ApiAttributeError as ApiAttributeError
|
|
136
|
+
from imzala_client.exceptions import ApiException as ApiException
|
|
137
|
+
|
|
138
|
+
# import models into sdk package
|
|
139
|
+
from imzala_client.models.api_error import ApiError as ApiError
|
|
140
|
+
from imzala_client.models.api_v1_demands_get200_response import ApiV1DemandsGet200Response as ApiV1DemandsGet200Response
|
|
141
|
+
from imzala_client.models.api_v1_demands_get200_response_data import ApiV1DemandsGet200ResponseData as ApiV1DemandsGet200ResponseData
|
|
142
|
+
from imzala_client.models.api_v1_demands_get200_response_data_demands_inner import ApiV1DemandsGet200ResponseDataDemandsInner as ApiV1DemandsGet200ResponseDataDemandsInner
|
|
143
|
+
from imzala_client.models.api_v1_demands_id_cancel_post200_response import ApiV1DemandsIdCancelPost200Response as ApiV1DemandsIdCancelPost200Response
|
|
144
|
+
from imzala_client.models.api_v1_demands_id_cancel_post200_response_data import ApiV1DemandsIdCancelPost200ResponseData as ApiV1DemandsIdCancelPost200ResponseData
|
|
145
|
+
from imzala_client.models.api_v1_demands_id_cancel_post_request import ApiV1DemandsIdCancelPostRequest as ApiV1DemandsIdCancelPostRequest
|
|
146
|
+
from imzala_client.models.api_v1_demands_id_delete409_response import ApiV1DemandsIdDelete409Response as ApiV1DemandsIdDelete409Response
|
|
147
|
+
from imzala_client.models.api_v1_demands_id_embed_session_post200_response import ApiV1DemandsIdEmbedSessionPost200Response as ApiV1DemandsIdEmbedSessionPost200Response
|
|
148
|
+
from imzala_client.models.api_v1_demands_id_embed_session_post200_response_data import ApiV1DemandsIdEmbedSessionPost200ResponseData as ApiV1DemandsIdEmbedSessionPost200ResponseData
|
|
149
|
+
from imzala_client.models.api_v1_demands_id_embed_session_post_request import ApiV1DemandsIdEmbedSessionPostRequest as ApiV1DemandsIdEmbedSessionPostRequest
|
|
150
|
+
from imzala_client.models.api_v1_demands_id_get200_response import ApiV1DemandsIdGet200Response as ApiV1DemandsIdGet200Response
|
|
151
|
+
from imzala_client.models.api_v1_demands_id_parties_party_id_resend_post200_response import ApiV1DemandsIdPartiesPartyIdResendPost200Response as ApiV1DemandsIdPartiesPartyIdResendPost200Response
|
|
152
|
+
from imzala_client.models.api_v1_demands_id_parties_party_id_resend_post200_response_data import ApiV1DemandsIdPartiesPartyIdResendPost200ResponseData as ApiV1DemandsIdPartiesPartyIdResendPost200ResponseData
|
|
153
|
+
from imzala_client.models.api_v1_demands_id_reminders_post200_response import ApiV1DemandsIdRemindersPost200Response as ApiV1DemandsIdRemindersPost200Response
|
|
154
|
+
from imzala_client.models.api_v1_demands_id_reminders_post200_response_data import ApiV1DemandsIdRemindersPost200ResponseData as ApiV1DemandsIdRemindersPost200ResponseData
|
|
155
|
+
from imzala_client.models.api_v1_demands_id_reminders_post200_response_data_dispatched_inner import ApiV1DemandsIdRemindersPost200ResponseDataDispatchedInner as ApiV1DemandsIdRemindersPost200ResponseDataDispatchedInner
|
|
156
|
+
from imzala_client.models.api_v1_demands_id_reminders_post200_response_data_skipped_inner import ApiV1DemandsIdRemindersPost200ResponseDataSkippedInner as ApiV1DemandsIdRemindersPost200ResponseDataSkippedInner
|
|
157
|
+
from imzala_client.models.api_v1_demands_id_reminders_post429_response import ApiV1DemandsIdRemindersPost429Response as ApiV1DemandsIdRemindersPost429Response
|
|
158
|
+
from imzala_client.models.api_v1_demands_id_reminders_post429_response_error import ApiV1DemandsIdRemindersPost429ResponseError as ApiV1DemandsIdRemindersPost429ResponseError
|
|
159
|
+
from imzala_client.models.api_v1_demands_id_timeline_get200_response import ApiV1DemandsIdTimelineGet200Response as ApiV1DemandsIdTimelineGet200Response
|
|
160
|
+
from imzala_client.models.api_v1_demands_id_timeline_get200_response_data import ApiV1DemandsIdTimelineGet200ResponseData as ApiV1DemandsIdTimelineGet200ResponseData
|
|
161
|
+
from imzala_client.models.api_v1_demands_id_timeline_get200_response_data_events_inner import ApiV1DemandsIdTimelineGet200ResponseDataEventsInner as ApiV1DemandsIdTimelineGet200ResponseDataEventsInner
|
|
162
|
+
from imzala_client.models.api_v1_demands_post201_response import ApiV1DemandsPost201Response as ApiV1DemandsPost201Response
|
|
163
|
+
from imzala_client.models.api_v1_demands_upload_post201_response import ApiV1DemandsUploadPost201Response as ApiV1DemandsUploadPost201Response
|
|
164
|
+
from imzala_client.models.api_v1_me_get200_response import ApiV1MeGet200Response as ApiV1MeGet200Response
|
|
165
|
+
from imzala_client.models.api_v1_me_get200_response_data import ApiV1MeGet200ResponseData as ApiV1MeGet200ResponseData
|
|
166
|
+
from imzala_client.models.api_v1_me_get200_response_data_credits import ApiV1MeGet200ResponseDataCredits as ApiV1MeGet200ResponseDataCredits
|
|
167
|
+
from imzala_client.models.api_v1_me_get200_response_data_workspace import ApiV1MeGet200ResponseDataWorkspace as ApiV1MeGet200ResponseDataWorkspace
|
|
168
|
+
from imzala_client.models.api_v1_templates_get200_response import ApiV1TemplatesGet200Response as ApiV1TemplatesGet200Response
|
|
169
|
+
from imzala_client.models.api_v1_templates_get200_response_data import ApiV1TemplatesGet200ResponseData as ApiV1TemplatesGet200ResponseData
|
|
170
|
+
from imzala_client.models.api_v1_templates_get401_response import ApiV1TemplatesGet401Response as ApiV1TemplatesGet401Response
|
|
171
|
+
from imzala_client.models.api_v1_templates_id_delete200_response import ApiV1TemplatesIdDelete200Response as ApiV1TemplatesIdDelete200Response
|
|
172
|
+
from imzala_client.models.api_v1_templates_id_delete200_response_data import ApiV1TemplatesIdDelete200ResponseData as ApiV1TemplatesIdDelete200ResponseData
|
|
173
|
+
from imzala_client.models.api_v1_templates_id_get200_response import ApiV1TemplatesIdGet200Response as ApiV1TemplatesIdGet200Response
|
|
174
|
+
from imzala_client.models.api_v1_templates_id_get404_response import ApiV1TemplatesIdGet404Response as ApiV1TemplatesIdGet404Response
|
|
175
|
+
from imzala_client.models.api_v1_templates_id_patch200_response import ApiV1TemplatesIdPatch200Response as ApiV1TemplatesIdPatch200Response
|
|
176
|
+
from imzala_client.models.api_v1_templates_id_patch200_response_data import ApiV1TemplatesIdPatch200ResponseData as ApiV1TemplatesIdPatch200ResponseData
|
|
177
|
+
from imzala_client.models.api_v1_templates_id_patch_request import ApiV1TemplatesIdPatchRequest as ApiV1TemplatesIdPatchRequest
|
|
178
|
+
from imzala_client.models.api_v1_templates_id_usage_get200_response import ApiV1TemplatesIdUsageGet200Response as ApiV1TemplatesIdUsageGet200Response
|
|
179
|
+
from imzala_client.models.api_v1_timestamps_post201_response import ApiV1TimestampsPost201Response as ApiV1TimestampsPost201Response
|
|
180
|
+
from imzala_client.models.api_v1_timestamps_post_request1 import ApiV1TimestampsPostRequest1 as ApiV1TimestampsPostRequest1
|
|
181
|
+
from imzala_client.models.create_demand_request import CreateDemandRequest as CreateDemandRequest
|
|
182
|
+
from imzala_client.models.created_demand import CreatedDemand as CreatedDemand
|
|
183
|
+
from imzala_client.models.created_demand_signing_urls_inner import CreatedDemandSigningUrlsInner as CreatedDemandSigningUrlsInner
|
|
184
|
+
from imzala_client.models.created_demand_upload import CreatedDemandUpload as CreatedDemandUpload
|
|
185
|
+
from imzala_client.models.demand_page import DemandPage as DemandPage
|
|
186
|
+
from imzala_client.models.demand_status import DemandStatus as DemandStatus
|
|
187
|
+
from imzala_client.models.demand_status_parties_inner import DemandStatusPartiesInner as DemandStatusPartiesInner
|
|
188
|
+
from imzala_client.models.page_item import PageItem as PageItem
|
|
189
|
+
from imzala_client.models.party_mapping_input import PartyMappingInput as PartyMappingInput
|
|
190
|
+
from imzala_client.models.party_mapping_input_variables_value import PartyMappingInputVariablesValue as PartyMappingInputVariablesValue
|
|
191
|
+
from imzala_client.models.reminder_settings import ReminderSettings as ReminderSettings
|
|
192
|
+
from imzala_client.models.standard_error import StandardError as StandardError
|
|
193
|
+
from imzala_client.models.standard_error_error import StandardErrorError as StandardErrorError
|
|
194
|
+
from imzala_client.models.template_detail import TemplateDetail as TemplateDetail
|
|
195
|
+
from imzala_client.models.template_party_summary import TemplatePartySummary as TemplatePartySummary
|
|
196
|
+
from imzala_client.models.template_summary import TemplateSummary as TemplateSummary
|
|
197
|
+
from imzala_client.models.template_summary_parties_inner import TemplateSummaryPartiesInner as TemplateSummaryPartiesInner
|
|
198
|
+
from imzala_client.models.template_usage import TemplateUsage as TemplateUsage
|
|
199
|
+
from imzala_client.models.template_usage_endpoint import TemplateUsageEndpoint as TemplateUsageEndpoint
|
|
200
|
+
from imzala_client.models.template_usage_example_request import TemplateUsageExampleRequest as TemplateUsageExampleRequest
|
|
201
|
+
from imzala_client.models.template_usage_parties_inner import TemplateUsagePartiesInner as TemplateUsagePartiesInner
|
|
202
|
+
from imzala_client.models.template_usage_parties_inner_supported_fields_inner import TemplateUsagePartiesInnerSupportedFieldsInner as TemplateUsagePartiesInnerSupportedFieldsInner
|
|
203
|
+
from imzala_client.models.template_usage_variables_inner import TemplateUsageVariablesInner as TemplateUsageVariablesInner
|
|
204
|
+
from imzala_client.models.template_variable import TemplateVariable as TemplateVariable
|
|
205
|
+
from imzala_client.models.timestamp_record import TimestampRecord as TimestampRecord
|
|
206
|
+
from imzala_client.models.trigger_reminder_request import TriggerReminderRequest as TriggerReminderRequest
|
|
207
|
+
from imzala_client.models.upsert_items_request import UpsertItemsRequest as UpsertItemsRequest
|
|
208
|
+
from imzala_client.models.upsert_items_response import UpsertItemsResponse as UpsertItemsResponse
|
|
209
|
+
from imzala_client.models.upsert_items_response_data import UpsertItemsResponseData as UpsertItemsResponseData
|
|
210
|
+
from imzala_client.models.upsert_items_response_data_items_inner import UpsertItemsResponseDataItemsInner as UpsertItemsResponseDataItemsInner
|
|
211
|
+
from imzala_client.models.webhook_data_demand_completed import WebhookDataDemandCompleted as WebhookDataDemandCompleted
|
|
212
|
+
from imzala_client.models.webhook_data_demand_completed_parties_inner import WebhookDataDemandCompletedPartiesInner as WebhookDataDemandCompletedPartiesInner
|
|
213
|
+
from imzala_client.models.webhook_data_demand_created import WebhookDataDemandCreated as WebhookDataDemandCreated
|
|
214
|
+
from imzala_client.models.webhook_data_demand_expired import WebhookDataDemandExpired as WebhookDataDemandExpired
|
|
215
|
+
from imzala_client.models.webhook_data_demand_expired_parties_inner import WebhookDataDemandExpiredPartiesInner as WebhookDataDemandExpiredPartiesInner
|
|
216
|
+
from imzala_client.models.webhook_data_party_rejected import WebhookDataPartyRejected as WebhookDataPartyRejected
|
|
217
|
+
from imzala_client.models.webhook_data_party_rejected_party import WebhookDataPartyRejectedParty as WebhookDataPartyRejectedParty
|
|
218
|
+
from imzala_client.models.webhook_data_party_signed import WebhookDataPartySigned as WebhookDataPartySigned
|
|
219
|
+
from imzala_client.models.webhook_data_party_viewed import WebhookDataPartyViewed as WebhookDataPartyViewed
|
|
220
|
+
from imzala_client.models.webhook_envelope import WebhookEnvelope as WebhookEnvelope
|
|
221
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# flake8: noqa
|
|
2
|
+
|
|
3
|
+
# import apis into api package
|
|
4
|
+
from imzala_client.api.account_api import AccountApi
|
|
5
|
+
from imzala_client.api.demands_api import DemandsApi
|
|
6
|
+
from imzala_client.api.reminders_api import RemindersApi
|
|
7
|
+
from imzala_client.api.templates_api import TemplatesApi
|
|
8
|
+
from imzala_client.api.timestamps_api import TimestampsApi
|
|
9
|
+
|