API-Dokumentation
Mit der externen API der Inventory-App können Sie programmatisch auf Ihre Daten zugreifen.
Überblick
Was ist die API?
Die externe API ist eine Schnittstelle, über die externe Programme auf die Daten der Inventory-App zugreifen können.
Anwendungsfälle
- Automatisierung: Massenverarbeitung von Dokumenten per Skript
- Drittanbieter-Integration: Datenaustausch mit anderen Diensten
- Massenverarbeitung: Vorlagen im Stapel erstellen und teilen
Erste Schritte
API-Schlüssel erstellen
Um die API zu nutzen, benötigen Sie zunächst einen API-Schlüssel.
- Öffnen Sie in der Inventory-App den Profilbildschirm
- Suchen Sie den Abschnitt API-Schlüssel
- Tippen Sie auf die Schaltfläche Schlüssel erstellen
- Der erstellte API-Schlüssel wird auf dem Bildschirm angezeigt
Wichtig: Der API-Schlüssel wird bei der Erstellung nur ein einziges Mal angezeigt. Kopieren Sie ihn unbedingt und bewahren Sie ihn an einem sicheren Ort auf. Bei Verlust muss ein neuer Schlüssel ausgestellt werden.
Format des API-Schlüssels
Der API-Schlüssel hat das folgende Format:
inv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- Beginnt mit dem Präfix
inv_ - Etwa 50 Zeichen lange Base64URL-codierte Zeichenkette
Verwaltung des API-Schlüssels
- Neu erstellen: Der bestehende Schlüssel wird ungültig und ein neuer wird ausgestellt
- Löschen: Der API-Schlüssel wird vollständig gelöscht (API nicht mehr nutzbar)
Authentifizierung
Alle API-Anfragen benötigen einen Authorization-Header.
Bearer-Token
Authorization: Bearer inv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Beispielanfrage
curl -H "Authorization: Bearer inv_your_api_key" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/items"
Rate Limiting
Die API-Nutzung ist begrenzt.
| Limit-Typ | Grenze | Beschreibung |
|---|---|---|
| Anfragen pro Minute | 60 | Schutz vor übermäßigen Anfragen |
| Anfragen pro Monat | Je nach Konto unterschiedlich | Vertraglich festgelegt |
Bei Überschreitung des Limits
- HTTP-Statuscode
429 Too Many Requestswird zurückgegeben - Versuchen Sie es nach kurzer Wartezeit erneut
API-Endpunkte
Basis-URL
https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1
Lese-API (GET)
| Endpunkt | Beschreibung |
|---|---|
GET /items |
Eigene Objektliste abrufen |
GET /items/{token} |
Objektdetails abrufen |
GET /templates |
Eigene Vorlagenliste abrufen |
GET /templates/{token} |
Vorlagendetails abrufen |
GET /templates/shared |
Liste der derzeit geteilten Vorlagen (Einstellung geplant — Freigabefunktion endet mit v3) |
GET /user/stats |
Nutzerstatistiken abrufen |
Schreib-API (POST)
| Endpunkt | Beschreibung |
|---|---|
POST /templates |
Neue Vorlage erstellen |
POST /templates/{token}/share |
Vorlage teilen (Einstellung geplant — Freigabefunktion endet mit v3) |
POST /templates/revoke |
Freigabe widerrufen (Einstellung geplant — Freigabefunktion endet mit v3) |
POST /templates/{token}/send |
Vorlage senden |
POST /templates/{token}/check-ownership |
Besitz eines geklonten Objekts prüfen |
POST /templates/{token}/log |
Log hinzufügen, Schlüsselwörter/Berechtigungen/Bild aktualisieren |
Detaillierte API-Spezifikation
GET /items - Objektliste
Ruft die Liste der eigenen Objekte (Dokumente) ab.
Anfrage
curl -H "Authorization: Bearer inv_xxx" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/items?page=1&pageSize=20"
Query-Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
| page | number | 1 | Seitennummer |
| pageSize | number | 20 | Einträge pro Seite (max. 100) |
| status | string | “active” | Statusfilter (active, pending) |
| type | string | - | Typfilter (paper, stamp) |
Antwort
{
"success": true,
"data": {
"items": [
{
"token": "암호화된_아이템_ID",
"title": "아이템 제목",
"content": "아이템 내용",
"type": "paper",
"status": "active",
"imageUrl": "https://...",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"totalItems": 50,
"totalPages": 3
}
}
}
GET /items/{token} - Objektdetails
Ruft die Detailinformationen eines bestimmten Objekts ab.
Anfrage
curl -H "Authorization: Bearer inv_xxx" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/items/{token}"
Antwort
{
"success": true,
"data": {
"token": "암호화된_아이템_ID",
"title": "아이템 제목",
"content": "아이템 내용",
"type": "paper",
"status": "active",
"imageUrl": "https://...",
"keywords": ["키:값", "태그:예시"],
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
}
GET /templates - Vorlagenliste
Ruft die Liste der eigenen Vorlagen (Stempel) ab.
Anfrage
curl -H "Authorization: Bearer inv_xxx" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates?page=1&pageSize=20"
Query-Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
| page | number | 1 | Seitennummer |
| pageSize | number | 20 | Einträge pro Seite (max. 100) |
Antwort
{
"success": true,
"data": {
"templates": [
{
"token": "암호화된_템플릿_ID",
"title": "템플릿 제목",
"content": "템플릿 내용",
"imageUrl": "https://...",
"commentMode": "independent",
"allowComments": true,
"logPermission": "owner",
"keywordPermission": "owner",
"allowEdit": false,
"isSharing": false,
"createdAt": "2025-01-01T00:00:00Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"totalItems": 10,
"totalPages": 1
}
}
}
GET /templates/shared - Geteilte Vorlagen
Ruft die Liste der derzeit geteilten Vorlagen ab.
Anfrage
curl -H "Authorization: Bearer inv_xxx" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/shared"
Antwort
{
"success": true,
"data": {
"sharedTemplates": [
{
"token": "암호화된_템플릿_ID",
"shareToken": "암호화된_공유_ID",
"title": "템플릿 제목",
"tags": ["TAG1", "TAG2"],
"expiresAt": "2025-01-02T00:00:00Z",
"copyCount": 5
}
]
}
}
GET /user/stats - Nutzerstatistiken
Ruft die eigenen Nutzungsstatistiken ab.
Anfrage
curl -H "Authorization: Bearer inv_xxx" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/user/stats"
Antwort
{
"success": true,
"data": {
"email": "user@example.com",
"createdAt": "2024-01-01T00:00:00Z",
"items": {
"total": 50,
"paper": 30,
"stamp": 20
},
"api": {
"enabled": true,
"monthlyLimit": 1000,
"monthlyUsed": 150,
"lastUsedAt": "2025-01-01T12:00:00Z"
}
}
}
POST /templates - Vorlage erstellen
Erstellt eine neue Vorlage (Stempel).
Anfrage
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/image.png",
"title": "템플릿 제목",
"content": "템플릿 내용",
"commentMode": "independent",
"logPermission": "owner",
"keywordPermission": "owner",
"allowEdit": true,
"keywords": ["품명:노트북", "가격:$1500000KRW$"]
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates"
Anfragekörper
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| imageUrl | string | Ja | Bild-URL (HTTPS empfohlen) |
| title | string | Ja | Titel (max. 32 Zeichen) |
| content | string | Ja | Inhalt (max. 1024 Zeichen) |
| commentMode | string | Nein | Kommentarmodus: “independent” oder “shared” |
logPermission ersetzt) |
|||
| logPermission | string | Nein | Log-Berechtigung: “owner” | “author” | “none” (Standard: “owner”) |
| keywordPermission | string | Nein | Schlüsselwort-Berechtigung: “owner” | “author” | “none” (Standard: “owner”) |
| allowEdit | boolean | Nein | Ob Bearbeitung erlaubt ist (Standard: true) |
| keywords | string[] | Nein | Schlüsselwort-Array (max. 128) |
| publishDate | string | Nein | Veröffentlichungsdatum (ISO 8601) |
| validUntil | string | Nein | Gültigkeitsdauer (ISO 8601) |
Schlüsselwort-Format
Schlüsselwörter müssen dem Format 키:값 (Schlüssel:Wert) folgen.
| Typ | Format | Beispiel |
|---|---|---|
| Allgemein | 키:값 |
품명:펜 |
| Datum | 키:@YYYY-MM-DD@ |
시작일:@2025-01-15@ |
| Telefon | 키:#전화번호# |
연락처:#+82 10-1234-5678# |
| Ort | 키:%주소% |
장소:%서울시 강남구% |
| Betrag | 키:$금액통화$ |
가격:$50000KRW$ |
Einschränkungen
- Schlüssellänge: max. 8 Zeichen
- Gesamtlänge der Schlüsselwörter: max. 256 Zeichen
- Anzahl der Schlüsselwörter: max. 128
Antwort
{
"success": true,
"data": {
"token": "암호화된_템플릿_ID",
"title": "템플릿 제목",
"createdAt": "2025-01-01T00:00:00Z"
}
}
POST /templates/{token}/share - Vorlage teilen
Teilt eine Vorlage, damit andere Nutzer sie finden können.
Anfrage
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"durationMinutes": 1440,
"tags": ["TAG1", "TAG2"]
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{token}/share"
Anfragekörper
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| durationMinutes | number | Ja | Freigabedauer (Minuten). 60-43200 oder 0 (unbegrenzt) |
| tags | string[] | Ja | Suchtags (1-16 Stück, automatische Umwandlung in Großbuchstaben) |
| logPermission | string | Nein | Log-Berechtigung: “owner” | “author” | “none” (überschreibt die Objekteinstellung) |
| keywordPermission | string | Nein | Schlüsselwort-Berechtigung: “owner” | “author” | “none” (überschreibt die Objekteinstellung) |
Berechtigungswerte
| Wert | Beschreibung |
|---|---|
| owner | Jeder, der die Vorlage geklont hat, kann hinzufügen/bearbeiten |
| author | Nur der Vorlagenautor kann hinzufügen/bearbeiten |
| none | Deaktiviert |
Freigabedauer
| Wert | Bedeutung |
|---|---|
| 60 | 1 Stunde |
| 1440 | 1 Tag (24 Stunden) |
| 10080 | 1 Woche |
| 43200 | 30 Tage (Maximum) |
| 0 | Unbegrenzt |
Antwort
{
"success": true,
"data": {
"shareToken": "암호화된_공유_ID",
"expiresAt": "2025-01-02T00:00:00Z",
"tags": ["TAG1", "TAG2"]
}
}
POST /templates/revoke - Freigabe widerrufen
Beendet die Freigabe einer derzeit geteilten Vorlage.
Anfrage
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"shareToken": "암호화된_공유_ID"
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/revoke"
Anfragekörper
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| shareToken | string | Ja | Beim Teilen ausgestelltes shareToken |
Antwort
{
"success": true,
"data": {
"message": "Share revoked successfully"
}
}
POST /templates/{token}/send - Vorlage senden
Klont eine Vorlage und sendet sie an einen anderen Nutzer.
Anfrage
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"recipientEmail": "recipient@example.com",
"message": "선물입니다!",
"keywords": ["날짜:2025-01-15", "금액:50000"]
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{token}/send"
Anfragekörper
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| recipientEmail | string | Ja | E-Mail des Empfängers |
| message | string | Nein | Sendenachricht (max. 200 Zeichen) |
| keywords | string[] | Nein | Array der hinzuzufügenden/zu überschreibenden Schlüsselwörter |
Regeln für das Zusammenführen von Schlüsselwörtern
Mit dem Parameter keywords können Sie die Standard-Schlüsselwörter der Vorlage überschreiben oder neue Schlüsselwörter hinzufügen.
| Situation | Verhalten |
|---|---|
| Gleicher Schlüssel vorhanden | Wird mit dem API-Wert überschrieben |
| Neuer Schlüssel | Wird der Schlüsselwortliste hinzugefügt |
Beispiel:
- Vorlagen-Schlüsselwörter:
["날짜:@date@", "가격:0"] - API-Schlüsselwörter:
["날짜:2025-01-15", "이름:홍길동"] - Ergebnis:
["날짜:2025-01-15", "가격:0", "이름:홍길동"]
Antwort
{
"success": true,
"data": {
"itemToken": "암호화된_아이템_ID",
"recipientEmail": "recipient@example.com",
"status": "pending"
}
}
POST /templates/{token}/check-ownership - Besitz eines geklonten Objekts prüfen
Prüft, ob ein bestimmter Nutzer ein aus dieser Vorlage erstelltes geklontes Objekt besitzt.
Sicherheit: Die Abfrage ist nur für Vorlagen möglich, die Ihnen selbst gehören. Vorlagen anderer Nutzer können nicht abgefragt werden.
Anfrage
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"keywordKeys": ["날짜", "금액"]
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{token}/check-ownership"
Anfragekörper
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| string | Ja | E-Mail des abzufragenden Nutzers | |
| keywordKeys | string[] | Nein | Liste der abzufragenden Schlüsselwort-Schlüssel |
Antwort (bei Besitz)
{
"success": true,
"data": {
"hasItem": true,
"itemTokens": ["암호화된_아이템_ID_1", "암호화된_아이템_ID_2"],
"keywords": {
"날짜": "2025-01-15",
"금액": "50000"
}
}
}
Antwort (kein Besitz)
{
"success": true,
"data": {
"hasItem": false
}
}
Antwortfelder
| Feld | Typ | Beschreibung |
|---|---|---|
| hasItem | boolean | Besitzstatus |
| itemTokens | string[] | Liste der besessenen Objekt-Token (nur bei Besitz) |
| keywords | object | Werte der angefragten Schlüsselwörter (nur bei Anfrage) |
Anwendungsbeispiel
Prüfung von Besitz und Nutzungsstatus eines bestimmten Nutzers in einem Coupon-/Ticketsystem:
# 쿠폰 발급 여부 확인
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{"email": "customer@example.com", "keywordKeys": ["발급일", "사용여부"]}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{쿠폰템플릿토큰}/check-ownership"
POST /templates/{token}/log - Log hinzufügen und Vorlage aktualisieren
Fügt einer geteilten Vorlage Logs (Feed) hinzu oder aktualisiert Schlüsselwörter, Berechtigungen oder das Bild. Nutzer, die diese Vorlage geklont haben, erhalten eine Push-Benachrichtigung.
Anfrage
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"logs": [
{"content": "붉은사막 최종 트레일러 공개 https://youtu.be/abc"},
{"content": "블로그:https://example.com/update-notes"}
],
"keywordUpdates": [
{"action": "upsert", "key": "출시일", "value": "2026-03-28"},
{"action": "upsert", "key": "가격", "value": "69,800원"},
{"action": "delete", "key": "베타일정"}
],
"permissionUpdates": {
"logPermission": "owner",
"keywordPermission": "author"
},
"imageUrl": "https://example.com/new-image.png"
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{token}/log"
Anfragekörper
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| logs | array | Bedingt* | Liste der hinzuzufügenden Logs (max. 10) |
| logs[].content | string | Ja | Log-Inhalt (1~256 Zeichen) |
| keywordUpdates | array | Bedingt* | Liste der Schlüsselwort-Änderungen (max. 20) |
| keywordUpdates[].action | string | Ja | "upsert" oder "delete" |
| keywordUpdates[].key | string | Ja | Schlüsselwort-Schlüssel (1~8 Zeichen) |
| keywordUpdates[].value | string | Bei upsert | Schlüsselwort-Wert (key:value zusammen max. 256 Zeichen) |
| permissionUpdates | object | Bedingt* | Berechtigungsänderung |
| permissionUpdates.logPermission | string | Nein | “owner” | “author” | “none” |
| permissionUpdates.keywordPermission | string | Nein | “owner” | “author” | “none” |
| imageUrl | string | Bedingt* | Neue Bild-URL (wird als 512x512 WebP neu verarbeitet) |
* Mindestens eines von
logs,keywordUpdates,permissionUpdates,imageUrlmuss angegeben werden.
Log-Inhaltsformat
Logs im Format 키:값 (Schlüssel 1~8 Zeichen) werden in der App als Info-/URL-Karten dargestellt:
| Format | Darstellung |
|---|---|
일반 텍스트 |
Normaler Textkommentar |
키:값 |
Info-Karte (Schlüssel-Wert-Anzeige) |
키:https://... |
URL-Karte (klickbarer Link) |
Antwort
{
"success": true,
"data": {
"logsAdded": 2,
"keywordsUpdated": 2,
"keywordsDeleted": 1,
"notificationsSent": 5
}
}
Anwendungsbeispiel
Schlüsselwörter eines Datenverfolgungs-Objekts regelmäßig aktualisieren und einen News-Feed hinzufügen:
# 유류비 데이터 갱신 + 뉴스 로그 추가
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"keywordUpdates": [
{"action": "upsert", "key": "휘발유", "value": "1,680원"},
{"action": "upsert", "key": "경유", "value": "1,520원"}
],
"logs": [
{"content": "3월 둘째주 전국 평균 유류비 소폭 상승 https://news.example.com/fuel"}
]
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{token}/log"
Fehlercodes
Bei fehlgeschlagenen API-Anfragen wird ein Fehler im folgenden Format zurückgegeben:
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "에러 설명"
}
}
Liste der Fehlercodes
| Code | HTTP-Status | Beschreibung |
|---|---|---|
| INVALID_API_KEY | 401 | Ungültiger API-Schlüssel |
| API_KEY_EXPIRED | 401 | Abgelaufener API-Schlüssel |
| API_DISABLED | 403 | API deaktiviert |
| RATE_LIMIT_EXCEEDED | 429 | Anfragelimit überschritten |
| SCOPE_DENIED | 403 | Unzureichende Berechtigung |
| VALIDATION_ERROR | 400 | Eingabefehler |
| INVALID_TOKEN | 400 | Ungültiger Token |
| NOT_FOUND | 404 | Ressource nicht gefunden |
| FORBIDDEN | 403 | Zugriff verweigert (kein Besitz) |
| RECIPIENT_NOT_FOUND | 404 | Empfänger nicht gefunden |
| INVALID_IMAGE | 400 | Fehlerhafte Bild-URL |
| ALREADY_SHARED | 400 | Vorlage wird bereits geteilt |
| NOT_SHARED | 400 | Vorlage wird derzeit nicht geteilt |
Sicherheitsempfehlungen
- API-Schlüssel schützen: Legen Sie den API-Schlüssel niemals in öffentlichen Repositories oder Client-Code offen
- HTTPS verwenden: Alle Anfragen werden über HTTPS übertragen
- Schlüsselrotation: Erstellen Sie den API-Schlüssel regelmäßig neu
- Minimale Berechtigungen: Führen Sie nur die notwendigen Vorgänge aus
Kontakt
Bei Problemen mit der API-Nutzung kontaktieren Sie uns bitte über die Seite Vorschlag einreichen.