Workspaces
Basis-URL: https://app.neuroflash.com/api/workspace-service
Erstellen und verwalten Sie Arbeitsbereiche.
Einen neuen Arbeitsbereich mit dem aktuellen Kunden als Eigentümer erstellen
POST
/v1/workspaceserstellt einen neuen Arbeitsbereich und fügt den aktuell angemeldeten Kunden als Mitglied mit der Rolle Eigentümer hinzu
Anfrage-Body
FeldTypErforderlichBeschreibung
namestringJaName des ArbeitsbereichsAntwort
FeldTypBeschreibung
_embeddedobject
avatarobject
_embeddedobject
signedUrlstringcreatedAtstringcreatedByUserIdstringfileNamestringidstringsignedUrlstringstorageKeystringupdatedAtstringworkspaceIdstringbillingContactobject
activeDiscountstringSchreibgeschützt von Stripe synchronisiert: true, wenn für diesen Stripe-Kunden ein Rabatt aktiv istaddressLine1stringSchreibgeschützt von Stripe synchronisiert: Erste Zeile der Adresse des AbrechnungskontaktsaddressLine2stringSchreibgeschützt von Stripe synchronisiert: Zweite Zeile der Adresse des AbrechnungskontaktscitystringSchreibgeschützt von Stripe synchronisiert: Stadt des AbrechnungskontaktscountrystringSchreibgeschützt von Stripe synchronisiert: Land des AbrechnungskontaktscreatedAtstringcreatedByUserIdstringdefaultPaymentCardNumberLastFourDigitsstringdefaultPaymentMethodstringdefaultPaymentMethodCardBrandstringemailstringE-Mail-Adresse des AbrechnungskontaktsidstringimportedFromLegacyCustomerIdintegerVeraltet: nur erforderlich, solange der Import von der Legacy-API noch aktiv ist ID des Legacy-Kunden, von dem dies importiert wurdenamestringName des AbrechnungskontaktspostalCodestringSchreibgeschützt, synchronisiert von Stripe: Postleitzahl des AbrechnungskontaktsstatestringSchreibgeschützt, synchronisiert von Stripe: Bundesland des AbrechnungskontaktsstripeCustomerIdstringStripe-Kunden-ID für Abrechnungszwecke. Könnte optional werden, wenn wir andere Zahlungsanbieter hinzufügenupdatedAtstringcurrentSubscriptionobject
_embeddedobject
availableWordsintegerVeraltet: Entfernen, sobald das Frontend es nicht mehr benötigt Veraltet, zur Root-Ebene verschobennewPricingPlanobject
activebooleanAuf true setzen, wenn dieser Tarif bei bestehenden und neuen Abonnements konfiguriert werden kannbillingIntervalstringcategoryIdstringID der Kategorie, zu der dieser Tarif gehörtdisplayNamestringName für interne Zwecke wie die Admin-UI oder HubSpot. Sollte nicht für Kunden angezeigt werdenidstringID des TarifsimportedFromLegacyIdintegerisDefaultbooleanIst dies der Standardtarif für neue Kunden?priceInEuronumberBetrag, den der Kunde für dieses Abonnement zahlen musspricePerCurrencyobjectEine Zuordnung von String-Schlüsseln zu Float-WertenstripeBillingPortalEnabledbooleanTrue, wenn Abonnements mit diesem Tarif selbst im Stripe-Abrechnungsportal verwaltet werden könnenstripePriceIdstringID des Preises in StripestripeTrackTokenMeterstringstripeTrackUsagebooleanVeraltettierintegertrialDaysintegerAnzahl der Testtage, die für diesen Tarif zulässig sindpricingPlanobject
activebooleanAuf true setzen, wenn dieser Tarif bei bestehenden und neuen Abonnements konfiguriert werden kannbillingIntervalstringcategoryIdstringID der Kategorie, zu der dieser Tarif gehörtdisplayNamestringName für interne Zwecke wie die Admin-UI oder HubSpot. Sollte nicht für Kunden angezeigt werdenidstringID des TarifsimportedFromLegacyIdintegerisDefaultbooleanIst dies der Standardtarif für neue Kunden?priceInEuronumberBetrag, den der Kunde für dieses Abonnement zahlen musspricePerCurrencyobjectEine Zuordnung von String-Schlüsseln zu Float-WertenstripeBillingPortalEnabledbooleanTrue, wenn Abonnements mit diesem Tarif selbst im Stripe-Abrechnungsportal verwaltet werden könnenstripePriceIdstringID des Preises in StripestripeTrackTokenMeterstringstripeTrackUsagebooleanVeraltettierintegertrialDaysintegerAnzahl der Testtage, die für diesen Tarif zulässig sindpricingPlanCategoryobject
displayNamestringidstringtranslationKeystringactivebooleanFlag, das anzeigt, ob das Abonnement aktiv ist. Abonnements können inaktiv werden, wenn sie pausiert werden oder mehr Mitglieder haben, als der aktuelle Tarif zulässtactiveDiscountsarray<string>Schreibgeschützt, synchronisiert von Stripe: true, wenn ein Rabatt für dieses Stripe-Abonnement aktiv istavailableWordsintegerAnzahl der Wörter, die in diesem Arbeitsbereich in der aktuellen Abrechnungsperiode noch verwendet werden könnenbonusWordsintegerVeraltet: wird in eine separate Limits-Tabelle/Service verschoben. Kann derzeit von Administratoren verwaltet werden Zusätzliche Bonuswörter, die zur Verfügung stehencreatedAtstringcreatedByUserIdstringcurrencystringendDatestringSchreibgeschützt, synchronisiert von Stripe: Datum, an dem dieses Abonnement automatisch gekündigt wirdidstringimportedFromLegacyCustomerIdintegerVeraltet: nur erforderlich, solange der Import von der Legacy-API noch aktiv ist ID des Legacy-Kunden, von dem dies importiert wurdeisGracePeriodbooleanTrue, wenn das Abonnement zu einem zukünftigen Datum gekündigt wirdisTrialbooleanTrue, wenn dies derzeit ein Testzeitraum istlimitRenewalDatestringNächstes Datum, an dem die Limits (wie verfügbare Wörter, verfügbare Bilder usw.) zurückgesetzt werden. Dies geschieht jeden Monat, ab dem Start des AbonnementsnextSubscriptionCycleStartstringSchreibgeschützt, synchronisiert von Stripe: Zeitstempel, wenn der nächste Abrechnungszyklus beginnt. Dies ist NICHT unbedingt der Zeitstempel, an dem wir die Limits in unserem System zurücksetzen, da wir sie monatlich zurücksetzen, auch wenn dies ein Jahresplan istpaymentCardNumberLastFourDigitsstringSchreibgeschützt, synchronisiert von Stripe: Letzte vier Ziffern der Zahlungskartennummer. Verwendet die Standardzahlung des Abonnements mit Fallback zur Zahlung aus der letzten RechnungpaymentMethodCardBrandstringpaymentPausedbooleanSchreibgeschützt, synchronisiert von Stripe: true, wenn die Zahlungserfassung für dieses Abonnement derzeit pausiert ist. Obwohl Stripe beabsichtigt, dass diese Abonnements aktiv bleiben und einfach für eine Weile kostenlos sind, behandeln wir Abonnements mit pausierter Zahlung als inaktivpaymentTypestringpricingPlanIdstringpricingPlanWordsintegerVeraltet: Diese Felder werden intern verwaltet, werden aber in die Limit-Struktur verschoben Veraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben Wie viele Wörter der Tarifplan aus diesem Abonnement erlaubt.sepaPaymentFailedbooleanSchreibgeschützt, synchronisiert von Stripe: Flag, das angibt, ob die SEPA-Zahlung fehlgeschlagen istspilloverWordsintegerVeraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben. Wird verwendet, um die verfügbaren Wörter im nächsten Monat zu berechnen, da Sie überlaufende Wörter aus dem letzten Monat nur behalten können, diese aber nicht über mehrere Monate hinweg akkumulieren können Wörter aus dem vorherigen Monat übertragenstripeStatusstringstripeSubscriptionIdstringStripe-Abonnement-IDstripeSubscriptionItemIdstringID des Abonnement-Elements in Stripe (Abonnements sollten nur ein Element haben)trialEndsAtstringSchreibgeschützt, synchronisiert von Stripe: Zeitstempel, wenn die Testphase endettrialStartedAtstringSchreibgeschützt, synchronisiert von Stripe: Datum, an dem die Testphase begonnen hat, falls eine laufenupdatedAtstringusedWordsintegerVeraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben Wie viele Wörter in diesem Arbeitsbereich im aktuellen Monat verwendet wurdenworkspaceIdstringID des Arbeitsbereichs, zu dem dieses Abonnement gehörtbillingContactIdstringID des Abrechnungskontakts für diesen ArbeitsbereichcreatedAtstringcreatedByUserIdstringcurrentSubscriptionIdstringID des aktuellen Abonnements für diesen ArbeitsbereichfirstMemberInvitedAtstringVeraltet Zeitstempel, wann das erste Mitglied zum Arbeitsbereich eingeladen wurdefirstPaidSubscriptionAtstringFalls dieser Arbeitsbereich jemals ein kostenpflichtiges Abonnement hatte, enthält dies das Datum, an dem das erste begannidstringimportedFromLegacyCustomerIdintegerVeraltet Einige Kunden haben kein zugewiesenes Team im Legacy-System als Besitzer, benötigen aber einen Arbeitsbereich, in den wir das Abonnement importieren könnenimportedFromLegacyTeamIdintegerVeraltet: Felder, die derzeit noch für das Legacy-System benötigt werden ID des Legacy-Teams, aus dem dieser Arbeitsbereich importiert wurdekeystringFür Menschen lesbare eindeutige Kennung des ArbeitsbereichskeyIndexintegerEindeutig auto-generierter Index, der verwendet wird, um einen eindeutigen Schlüssel zu generierennamestringName des ArbeitsbereichstrialStartedAtstringFalls dieser Arbeitsbereich jemals ein Abonnement mit einer Testphase hatte, enthält dies den Zeitpunkt, wann sie gestartet wurdeupdatedAtstringBeispiel
- cURL
- Python
- Node.js
- Go
curl -X POST "https://app.neuroflash.com/api/workspace-service/v1/workspaces" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string"
}'
import requests
response = requests.post(
f"https://app.neuroflash.com/api/workspace-service/v1/workspaces",
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
json={
"name": "string"
},
).json()
const response = await fetch(
`https://app.neuroflash.com/api/workspace-service/v1/workspaces`,
{
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "string"
}),
}
).then((r) => r.json());
body, _ := json.Marshal(map[string]any{
"name": "string",
})
req, _ := http.NewRequest("POST", "https://app.neuroflash.com/api/workspace-service/v1/workspaces", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
Antwort:
{
"_embedded": {
"avatar": {
"_embedded": {
"signedUrl": "https://storage.googleapis.com/workspaces/550e8400-e29b-41d4-a716-446655440000/avatar/113c0b32-ed6c-4421-b7da-d1faf238eb56.jpg"
},
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"fileName": "a2G8Sa7Mn47Je0Lm.png",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"signedUrl": "https://storage.googleapis.com/workspaces/550e8400-e29b-41d4-a716-446655440000/avatar/113c0b32-ed6c-4421-b7da-d1faf238eb56.jpg",
"storageKey": "workspaces/550e8400-e29b-41d4-a716-446655440000/avatar",
"updatedAt": "2025-01-14T16:20:59Z",
"workspaceId": "550e8400-e29b-41d4-a716-446655440000"
},
"billingContact": {
"activeDiscount": "string",
"addressLine1": "123 Main St",
"addressLine2": "123 Main St",
"city": "Berlin",
"country": "DE",
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"defaultPaymentCardNumberLastFourDigits": "1234",
"defaultPaymentMethod": "acss_debit",
"defaultPaymentMethodCardBrand": "amex",
"email": "max.mustermann@neuroflash.com",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"importedFromLegacyCustomerId": 12345,
"name": "Max Mustermann",
"postalCode": "12345",
"state": "Schleswig-Holstein",
"stripeCustomerId": "cus_12345abcdef",
"updatedAt": "2025-01-14T16:20:59Z"
},
"currentSubscription": {
"_embedded": {
"availableWords": 500,
"newPricingPlan": {
"active": "...",
"billingInterval": "...",
"categoryId": "...",
"displayName": "...",
"id": "...",
"importedFromLegacyId": "...",
"isDefault": "...",
"priceInEuro": "...",
"pricePerCurrency": "...",
"stripeBillingPortalEnabled": "...",
"stripePriceId": "...",
"stripeTrackTokenMeter": "...",
"stripeTrackUsage": "...",
"tier": "...",
"trialDays": "..."
},
"pricingPlan": {
"active": "...",
"billingInterval": "...",
"categoryId": "...",
"displayName": "...",
"id": "...",
"importedFromLegacyId": "...",
"isDefault": "...",
"priceInEuro": "...",
"pricePerCurrency": "...",
"stripeBillingPortalEnabled": "...",
"stripePriceId": "...",
"stripeTrackTokenMeter": "...",
"stripeTrackUsage": "...",
"tier": "...",
"trialDays": "..."
},
"pricingPlanCategory": {
"displayName": "...",
"id": "...",
"translationKey": "..."
}
},
"active": true,
"activeDiscounts": [
"string"
],
"availableWords": 500,
"bonusWords": 1000,
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"currency": "aed",
"endDate": "string",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"importedFromLegacyCustomerId": 12345,
"isGracePeriod": false,
"isTrial": false,
"limitRenewalDate": "string",
"nextSubscriptionCycleStart": "2024-01-01T00:00:00Z",
"paymentCardNumberLastFourDigits": "4242",
"paymentMethodCardBrand": "amex",
"paymentPaused": false,
"paymentType": "acss_debit",
"pricingPlanId": "18d0045a-5850-4bf4-8d5d-3dc8684e2bb2",
"pricingPlanWords": 10000,
"sepaPaymentFailed": false,
"spilloverWords": 500,
"stripeStatus": "active",
"stripeSubscriptionId": "sub_12345abcdef",
"stripeSubscriptionItemId": "sub_item_ad909w0",
"trialEndsAt": "2023-12-31T23:59:59Z",
"trialStartedAt": "string",
"updatedAt": "2025-01-14T16:20:59Z",
"usedWords": 5000,
"workspaceId": "550e8400-e29b-41d4-a716-446655440000"
}
},
"billingContactId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"currentSubscriptionId": "550e8400-e29b-41d4-a716-446655440000",
"firstMemberInvitedAt": "2022-01-01T00:00:00Z",
"firstPaidSubscriptionAt": "string",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"importedFromLegacyCustomerId": 177,
"importedFromLegacyTeamId": 187,
"key": "NF-GK352",
"keyIndex": 57,
"name": "Online Marketing Team",
"trialStartedAt": "2014-01-02T14:22:00Z",
"updatedAt": "2025-01-14T16:20:59Z"
}
Für den authentifizierten Kunden sichtbare Arbeitsbereiche auflisten
GET
/v1/workspacesAlle Arbeitsbereiche auflisten, die der authentifizierte Kunde einsehen darf
Abfrageparameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
page | integer | — | Seitennummer für Pagination |
size | integer | — | Anzahl der Elemente pro Seite |
order | string | — | Sortierrichtung: asc oder desc |
sort | string | — | Feldname zum Sortieren |
importedFromLegacyTeamIds | string | — | Nach legacyTeamIds filtern, aus denen der Arbeitsbereich erstellt wurde, durch Komma getrennt |
ownerLegacyCustomerIds | string | — | Nach Legacy-Kunden-IDs des Besitzers filtern |
search | string | — | sucht im Namen, der ID und dem Schlüssel des Arbeitsbereichs |
Antwort
FeldTypBeschreibung
dataarray<object>
_embeddedobject
avatarobject
_embeddedobject
signedUrlstringcreatedAtstringcreatedByUserIdstringfileNamestringidstringsignedUrlstringstorageKeystringupdatedAtstringworkspaceIdstringbillingContactobject
activeDiscountstringSchreibgeschützt von Stripe synchronisiert: true, wenn für diesen Stripe-Kunden ein Rabatt aktiv istaddressLine1stringSchreibgeschützt von Stripe synchronisiert: Erste Zeile der Adresse des AbrechnungskontaktsaddressLine2stringSchreibgeschützt von Stripe synchronisiert: Zweite Zeile der Adresse des AbrechnungskontaktscitystringSchreibgeschützt von Stripe synchronisiert: Stadt des AbrechnungskontaktscountrystringSchreibgeschützt von Stripe synchronisiert: Land des AbrechnungskontaktscreatedAtstringcreatedByUserIdstringdefaultPaymentCardNumberLastFourDigitsstringdefaultPaymentMethodstringdefaultPaymentMethodCardBrandstringemailstringE-Mail-Adresse des AbrechnungskontaktsidstringimportedFromLegacyCustomerIdintegerVeraltet: nur erforderlich, solange der Import von der Legacy-API noch aktiv ist ID des Legacy-Kunden, von dem dies importiert wurdenamestringName des AbrechnungskontaktspostalCodestringSchreibgeschützt, synchronisiert von Stripe: Postleitzahl des AbrechnungskontaktsstatestringSchreibgeschützt, synchronisiert von Stripe: Bundesland des AbrechnungskontaktsstripeCustomerIdstringStripe-Kunden-ID für Abrechnungszwecke. Könnte optional werden, wenn wir andere Zahlungsanbieter hinzufügenupdatedAtstringcurrentSubscriptionobject
_embeddedobject
availableWordsintegerVeraltet: Entfernen, sobald das Frontend es nicht mehr benötigt Veraltet, zur Root-Ebene verschobennewPricingPlanobject
activebooleanAuf true setzen, wenn dieser Tarif bei bestehenden und neuen Abonnements konfiguriert werden kannbillingIntervalstringcategoryIdstringID der Kategorie, zu der dieser Tarif gehörtdisplayNamestringName für interne Zwecke wie die Admin-UI oder HubSpot. Sollte nicht für Kunden angezeigt werdenidstringID des TarifsimportedFromLegacyIdintegerisDefaultbooleanIst dies der Standardtarif für neue Kunden?priceInEuronumberBetrag, den der Kunde für dieses Abonnement zahlen musspricePerCurrencyobjectEine Zuordnung von String-Schlüsseln zu Float-WertenstripeBillingPortalEnabledbooleanTrue, wenn Abonnements mit diesem Tarif selbst im Stripe-Abrechnungsportal verwaltet werden könnenstripePriceIdstringID des Preises in StripestripeTrackTokenMeterstringstripeTrackUsagebooleanVeraltettierintegertrialDaysintegerAnzahl der Testtage, die für diesen Tarif zulässig sindpricingPlanobject
activebooleanAuf true setzen, wenn dieser Tarif bei bestehenden und neuen Abonnements konfiguriert werden kannbillingIntervalstringcategoryIdstringID der Kategorie, zu der dieser Tarif gehörtdisplayNamestringName für interne Zwecke wie die Admin-UI oder HubSpot. Sollte nicht für Kunden angezeigt werdenidstringID des TarifsimportedFromLegacyIdintegerisDefaultbooleanIst dies der Standardtarif für neue Kunden?priceInEuronumberBetrag, den der Kunde für dieses Abonnement zahlen musspricePerCurrencyobjectEine Zuordnung von String-Schlüsseln zu Float-WertenstripeBillingPortalEnabledbooleanTrue, wenn Abonnements mit diesem Tarif selbst im Stripe-Abrechnungsportal verwaltet werden könnenstripePriceIdstringID des Preises in StripestripeTrackTokenMeterstringstripeTrackUsagebooleanVeraltettierintegertrialDaysintegerAnzahl der Testtage, die für diesen Tarif zulässig sindpricingPlanCategoryobject
displayNamestringidstringtranslationKeystringactivebooleanFlag, das anzeigt, ob das Abonnement aktiv ist. Abonnements können inaktiv werden, wenn sie pausiert werden oder mehr Mitglieder haben, als der aktuelle Tarif zulässtactiveDiscountsarray<string>Schreibgeschützt, synchronisiert von Stripe: true, wenn ein Rabatt für dieses Stripe-Abonnement aktiv istavailableWordsintegerAnzahl der Wörter, die in diesem Arbeitsbereich in der aktuellen Abrechnungsperiode noch verwendet werden könnenbonusWordsintegerVeraltet: wird in eine separate Limits-Tabelle/Service verschoben. Kann derzeit von Administratoren verwaltet werden Zusätzliche Bonuswörter, die zur Verfügung stehencreatedAtstringcreatedByUserIdstringcurrencystringendDatestringSchreibgeschützt, synchronisiert von Stripe: Datum, an dem dieses Abonnement automatisch gekündigt wirdidstringimportedFromLegacyCustomerIdintegerVeraltet: nur erforderlich, solange der Import von der Legacy-API noch aktiv ist ID des Legacy-Kunden, von dem dies importiert wurdeisGracePeriodbooleanTrue, wenn das Abonnement zu einem zukünftigen Datum gekündigt wirdisTrialbooleanTrue, wenn dies derzeit ein Testzeitraum istlimitRenewalDatestringNächstes Datum, an dem die Limits (wie verfügbare Wörter, verfügbare Bilder usw.) zurückgesetzt werden. Dies geschieht jeden Monat, ab dem Start des AbonnementsnextSubscriptionCycleStartstringSchreibgeschützt, synchronisiert von Stripe: Zeitstempel, wenn der nächste Abrechnungszyklus beginnt. Dies ist NICHT unbedingt der Zeitstempel, an dem wir die Limits in unserem System zurücksetzen, da wir sie monatlich zurücksetzen, auch wenn dies ein Jahresplan istpaymentCardNumberLastFourDigitsstringSchreibgeschützt, synchronisiert von Stripe: Letzte vier Ziffern der Zahlungskartennummer. Verwendet die Standardzahlung des Abonnements mit Fallback zur Zahlung aus der letzten RechnungpaymentMethodCardBrandstringpaymentPausedbooleanSchreibgeschützt, synchronisiert von Stripe: true, wenn die Zahlungserfassung für dieses Abonnement derzeit pausiert ist. Obwohl Stripe beabsichtigt, dass diese Abonnements aktiv bleiben und einfach für eine Weile kostenlos sind, behandeln wir Abonnements mit pausierter Zahlung als inaktivpaymentTypestringpricingPlanIdstringpricingPlanWordsintegerVeraltet: Diese Felder werden intern verwaltet, werden aber in die Limit-Struktur verschoben Veraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben Wie viele Wörter der Tarifplan aus diesem Abonnement erlaubt.sepaPaymentFailedbooleanSchreibgeschützt, synchronisiert von Stripe: Flag, das angibt, ob die SEPA-Zahlung fehlgeschlagen istspilloverWordsintegerVeraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben. Wird verwendet, um die verfügbaren Wörter im nächsten Monat zu berechnen, da Sie überlaufende Wörter aus dem letzten Monat nur behalten können, diese aber nicht über mehrere Monate hinweg akkumulieren können Wörter aus dem vorherigen Monat übertragenstripeStatusstringstripeSubscriptionIdstringStripe-Abonnement-IDstripeSubscriptionItemIdstringID des Abonnement-Elements in Stripe (Abonnements sollten nur ein Element haben)trialEndsAtstringSchreibgeschützt, synchronisiert von Stripe: Zeitstempel, wenn die Testphase endettrialStartedAtstringSchreibgeschützt, synchronisiert von Stripe: Datum, an dem die Testphase begonnen hat, falls eine laufenupdatedAtstringusedWordsintegerVeraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben Wie viele Wörter in diesem Arbeitsbereich im aktuellen Monat verwendet wurdenworkspaceIdstringID des Arbeitsbereichs, zu dem dieses Abonnement gehörtbillingContactIdstringID des Abrechnungskontakts für diesen ArbeitsbereichcreatedAtstringcreatedByUserIdstringcurrentSubscriptionIdstringID des aktuellen Abonnements für diesen ArbeitsbereichfirstMemberInvitedAtstringVeraltet Zeitstempel, wann das erste Mitglied zum Arbeitsbereich eingeladen wurdefirstPaidSubscriptionAtstringFalls dieser Arbeitsbereich jemals ein kostenpflichtiges Abonnement hatte, enthält dies das Datum, an dem das erste begannidstringimportedFromLegacyCustomerIdintegerVeraltet Einige Kunden haben kein zugewiesenes Team im Legacy-System als Besitzer, benötigen aber einen Arbeitsbereich, in den wir das Abonnement importieren könnenimportedFromLegacyTeamIdintegerVeraltet: Felder, die derzeit noch für das Legacy-System benötigt werden ID des Legacy-Teams, aus dem dieser Arbeitsbereich importiert wurdekeystringFür Menschen lesbare eindeutige Kennung des ArbeitsbereichskeyIndexintegerEindeutig auto-generierter Index, der verwendet wird, um einen eindeutigen Schlüssel zu generierennamestringName des ArbeitsbereichstrialStartedAtstringFalls dieser Arbeitsbereich jemals ein Abonnement mit einer Testphase hatte, enthält dies den Zeitpunkt, wann sie gestartet wurdeupdatedAtstringpageobject
currentPageintegersizeintegertotalElementsintegertotalPagesintegerBeispiel
- cURL
- Python
- Node.js
- Go
curl "https://app.neuroflash.com/api/workspace-service/v1/workspaces" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
import requests
response = requests.get(
f"https://app.neuroflash.com/api/workspace-service/v1/workspaces",
headers={"Authorization": f"Bearer {token}"},
).json()
const response = await fetch(
`https://app.neuroflash.com/api/workspace-service/v1/workspaces`,
{ headers: { Authorization: `Bearer ${token}` } }
).then((r) => r.json());
req, _ := http.NewRequest("GET", "https://app.neuroflash.com/api/workspace-service/v1/workspaces", nil)
req.Header.Set("Authorization", "Bearer "+token)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
Antwort:
{
"data": [
{
"_embedded": {
"avatar": {
"_embedded": "...",
"createdAt": "...",
"createdByUserId": "...",
"fileName": "...",
"id": "...",
"signedUrl": "...",
"storageKey": "...",
"updatedAt": "...",
"workspaceId": "..."
},
"billingContact": {
"activeDiscount": "...",
"addressLine1": "...",
"addressLine2": "...",
"city": "...",
"country": "...",
"createdAt": "...",
"createdByUserId": "...",
"defaultPaymentCardNumberLastFourDigits": "...",
"defaultPaymentMethod": "...",
"defaultPaymentMethodCardBrand": "...",
"email": "...",
"id": "...",
"importedFromLegacyCustomerId": "...",
"name": "...",
"postalCode": "...",
"state": "...",
"stripeCustomerId": "...",
"updatedAt": "..."
},
"currentSubscription": {
"_embedded": "...",
"active": "...",
"activeDiscounts": "...",
"availableWords": "...",
"bonusWords": "...",
"createdAt": "...",
"createdByUserId": "...",
"currency": "...",
"endDate": "...",
"id": "...",
"importedFromLegacyCustomerId": "...",
"isGracePeriod": "...",
"isTrial": "...",
"limitRenewalDate": "...",
"nextSubscriptionCycleStart": "...",
"paymentCardNumberLastFourDigits": "...",
"paymentMethodCardBrand": "...",
"paymentPaused": "...",
"paymentType": "...",
"pricingPlanId": "...",
"pricingPlanWords": "...",
"sepaPaymentFailed": "...",
"spilloverWords": "...",
"stripeStatus": "...",
"stripeSubscriptionId": "...",
"stripeSubscriptionItemId": "...",
"trialEndsAt": "...",
"trialStartedAt": "...",
"updatedAt": "...",
"usedWords": "...",
"workspaceId": "..."
}
},
"billingContactId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"currentSubscriptionId": "550e8400-e29b-41d4-a716-446655440000",
"firstMemberInvitedAt": "2022-01-01T00:00:00Z",
"firstPaidSubscriptionAt": "string",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"importedFromLegacyCustomerId": 177,
"importedFromLegacyTeamId": 187,
"key": "NF-GK352",
"keyIndex": 57,
"name": "Online Marketing Team",
"trialStartedAt": "2014-01-02T14:22:00Z",
"updatedAt": "2025-01-14T16:20:59Z"
}
],
"page": {
"currentPage": 2,
"size": 10,
"totalElements": 35,
"totalPages": 4
}
}
Get
GET
/v1/workspaces/{workspaceId}Pfadparameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
workspaceId | string | Ja | Arbeitsbereich-ID |
Antwort
FeldTypBeschreibung
_embeddedobject
avatarobject
_embeddedobject
signedUrlstringcreatedAtstringcreatedByUserIdstringfileNamestringidstringsignedUrlstringstorageKeystringupdatedAtstringworkspaceIdstringbillingContactobject
activeDiscountstringSchreibgeschützt von Stripe synchronisiert: true, wenn für diesen Stripe-Kunden ein Rabatt aktiv istaddressLine1stringSchreibgeschützt von Stripe synchronisiert: Erste Zeile der Adresse des AbrechnungskontaktsaddressLine2stringSchreibgeschützt von Stripe synchronisiert: Zweite Zeile der Adresse des AbrechnungskontaktscitystringSchreibgeschützt von Stripe synchronisiert: Stadt des AbrechnungskontaktscountrystringSchreibgeschützt von Stripe synchronisiert: Land des AbrechnungskontaktscreatedAtstringcreatedByUserIdstringdefaultPaymentCardNumberLastFourDigitsstringdefaultPaymentMethodstringdefaultPaymentMethodCardBrandstringemailstringE-Mail-Adresse des AbrechnungskontaktsidstringimportedFromLegacyCustomerIdintegerVeraltet: nur erforderlich, solange der Import von der Legacy-API noch aktiv ist ID des Legacy-Kunden, von dem dies importiert wurdenamestringName des AbrechnungskontaktspostalCodestringSchreibgeschützt, synchronisiert von Stripe: Postleitzahl des AbrechnungskontaktsstatestringSchreibgeschützt, synchronisiert von Stripe: Bundesland des AbrechnungskontaktsstripeCustomerIdstringStripe-Kunden-ID für Abrechnungszwecke. Könnte optional werden, wenn wir andere Zahlungsanbieter hinzufügenupdatedAtstringcurrentSubscriptionobject
_embeddedobject
availableWordsintegerVeraltet: Entfernen, sobald das Frontend es nicht mehr benötigt Veraltet, zur Root-Ebene verschobennewPricingPlanobject
activebooleanAuf true setzen, wenn dieser Tarif bei bestehenden und neuen Abonnements konfiguriert werden kannbillingIntervalstringcategoryIdstringID der Kategorie, zu der dieser Tarif gehörtdisplayNamestringName für interne Zwecke wie die Admin-UI oder HubSpot. Sollte nicht für Kunden angezeigt werdenidstringID des TarifsimportedFromLegacyIdintegerisDefaultbooleanIst dies der Standardtarif für neue Kunden?priceInEuronumberBetrag, den der Kunde für dieses Abonnement zahlen musspricePerCurrencyobjectEine Zuordnung von String-Schlüsseln zu Float-WertenstripeBillingPortalEnabledbooleanTrue, wenn Abonnements mit diesem Tarif selbst im Stripe-Abrechnungsportal verwaltet werden könnenstripePriceIdstringID des Preises in StripestripeTrackTokenMeterstringstripeTrackUsagebooleanVeraltettierintegertrialDaysintegerAnzahl der Testtage, die für diesen Tarif zulässig sindpricingPlanobject
activebooleanAuf true setzen, wenn dieser Tarif bei bestehenden und neuen Abonnements konfiguriert werden kannbillingIntervalstringcategoryIdstringID der Kategorie, zu der dieser Tarif gehörtdisplayNamestringName für interne Zwecke wie die Admin-UI oder HubSpot. Sollte nicht für Kunden angezeigt werdenidstringID des TarifsimportedFromLegacyIdintegerisDefaultbooleanIst dies der Standardtarif für neue Kunden?priceInEuronumberBetrag, den der Kunde für dieses Abonnement zahlen musspricePerCurrencyobjectEine Zuordnung von String-Schlüsseln zu Float-WertenstripeBillingPortalEnabledbooleanTrue, wenn Abonnements mit diesem Tarif selbst im Stripe-Abrechnungsportal verwaltet werden könnenstripePriceIdstringID des Preises in StripestripeTrackTokenMeterstringstripeTrackUsagebooleanVeraltettierintegertrialDaysintegerAnzahl der Testtage, die für diesen Tarif zulässig sindpricingPlanCategoryobject
displayNamestringidstringtranslationKeystringactivebooleanFlag, das anzeigt, ob das Abonnement aktiv ist. Abonnements können inaktiv werden, wenn sie pausiert werden oder mehr Mitglieder haben, als der aktuelle Tarif zulässtactiveDiscountsarray<string>Schreibgeschützt, synchronisiert von Stripe: true, wenn ein Rabatt für dieses Stripe-Abonnement aktiv istavailableWordsintegerAnzahl der Wörter, die in diesem Arbeitsbereich in der aktuellen Abrechnungsperiode noch verwendet werden könnenbonusWordsintegerVeraltet: wird in eine separate Limits-Tabelle/Service verschoben. Kann derzeit von Administratoren verwaltet werden Zusätzliche Bonuswörter, die zur Verfügung stehencreatedAtstringcreatedByUserIdstringcurrencystringendDatestringSchreibgeschützt, synchronisiert von Stripe: Datum, an dem dieses Abonnement automatisch gekündigt wirdidstringimportedFromLegacyCustomerIdintegerVeraltet: nur erforderlich, solange der Import von der Legacy-API noch aktiv ist ID des Legacy-Kunden, von dem dies importiert wurdeisGracePeriodbooleanTrue, wenn das Abonnement zu einem zukünftigen Datum gekündigt wirdisTrialbooleanTrue, wenn dies derzeit ein Testzeitraum istlimitRenewalDatestringNächstes Datum, an dem die Limits (wie verfügbare Wörter, verfügbare Bilder usw.) zurückgesetzt werden. Dies geschieht jeden Monat, ab dem Start des AbonnementsnextSubscriptionCycleStartstringSchreibgeschützt, synchronisiert von Stripe: Zeitstempel, wenn der nächste Abrechnungszyklus beginnt. Dies ist NICHT unbedingt der Zeitstempel, an dem wir die Limits in unserem System zurücksetzen, da wir sie monatlich zurücksetzen, auch wenn dies ein Jahresplan istpaymentCardNumberLastFourDigitsstringSchreibgeschützt, synchronisiert von Stripe: Letzte vier Ziffern der Zahlungskartennummer. Verwendet die Standardzahlung des Abonnements mit Fallback zur Zahlung aus der letzten RechnungpaymentMethodCardBrandstringpaymentPausedbooleanSchreibgeschützt, synchronisiert von Stripe: true, wenn die Zahlungserfassung für dieses Abonnement derzeit pausiert ist. Obwohl Stripe beabsichtigt, dass diese Abonnements aktiv bleiben und einfach für eine Weile kostenlos sind, behandeln wir Abonnements mit pausierter Zahlung als inaktivpaymentTypestringpricingPlanIdstringpricingPlanWordsintegerVeraltet: Diese Felder werden intern verwaltet, werden aber in die Limit-Struktur verschoben Veraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben Wie viele Wörter der Tarifplan aus diesem Abonnement erlaubt.sepaPaymentFailedbooleanSchreibgeschützt, synchronisiert von Stripe: Flag, das angibt, ob die SEPA-Zahlung fehlgeschlagen istspilloverWordsintegerVeraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben. Wird verwendet, um die verfügbaren Wörter im nächsten Monat zu berechnen, da Sie überlaufende Wörter aus dem letzten Monat nur behalten können, diese aber nicht über mehrere Monate hinweg akkumulieren können Wörter aus dem vorherigen Monat übertragenstripeStatusstringstripeSubscriptionIdstringStripe-Abonnement-IDstripeSubscriptionItemIdstringID des Abonnement-Elements in Stripe (Abonnements sollten nur ein Element haben)trialEndsAtstringSchreibgeschützt, synchronisiert von Stripe: Zeitstempel, wenn die Testphase endettrialStartedAtstringSchreibgeschützt, synchronisiert von Stripe: Datum, an dem die Testphase begonnen hat, falls eine laufenupdatedAtstringusedWordsintegerVeraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben Wie viele Wörter in diesem Arbeitsbereich im aktuellen Monat verwendet wurdenworkspaceIdstringID des Arbeitsbereichs, zu dem dieses Abonnement gehörtbillingContactIdstringID des Abrechnungskontakts für diesen ArbeitsbereichcreatedAtstringcreatedByUserIdstringcurrentSubscriptionIdstringID des aktuellen Abonnements für diesen ArbeitsbereichfirstMemberInvitedAtstringVeraltet Zeitstempel, wann das erste Mitglied zum Arbeitsbereich eingeladen wurdefirstPaidSubscriptionAtstringFalls dieser Arbeitsbereich jemals ein kostenpflichtiges Abonnement hatte, enthält dies das Datum, an dem das erste begannidstringimportedFromLegacyCustomerIdintegerVeraltet Einige Kunden haben kein zugewiesenes Team im Legacy-System als Besitzer, benötigen aber einen Arbeitsbereich, in den wir das Abonnement importieren könnenimportedFromLegacyTeamIdintegerVeraltet: Felder, die derzeit noch für das Legacy-System benötigt werden ID des Legacy-Teams, aus dem dieser Arbeitsbereich importiert wurdekeystringFür Menschen lesbare eindeutige Kennung des ArbeitsbereichskeyIndexintegerEindeutig auto-generierter Index, der verwendet wird, um einen eindeutigen Schlüssel zu generierennamestringName des ArbeitsbereichstrialStartedAtstringFalls dieser Arbeitsbereich jemals ein Abonnement mit einer Testphase hatte, enthält dies den Zeitpunkt, wann sie gestartet wurdeupdatedAtstringBeispiel
- cURL
- Python
- Node.js
- Go
curl "https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
import requests
response = requests.get(
f"https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}",
headers={"Authorization": f"Bearer {token}"},
).json()
const response = await fetch(
`https://app.neuroflash.com/api/workspace-service/v1/workspaces/${workspaceId}`,
{ headers: { Authorization: `Bearer ${token}` } }
).then((r) => r.json());
req, _ := http.NewRequest("GET", "https://app.neuroflash.com/api/workspace-service/v1/workspaces/"+workspaceID+"", nil)
req.Header.Set("Authorization", "Bearer "+token)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
Antwort:
{
"_embedded": {
"avatar": {
"_embedded": {
"signedUrl": "https://storage.googleapis.com/workspaces/550e8400-e29b-41d4-a716-446655440000/avatar/113c0b32-ed6c-4421-b7da-d1faf238eb56.jpg"
},
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"fileName": "a2G8Sa7Mn47Je0Lm.png",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"signedUrl": "https://storage.googleapis.com/workspaces/550e8400-e29b-41d4-a716-446655440000/avatar/113c0b32-ed6c-4421-b7da-d1faf238eb56.jpg",
"storageKey": "workspaces/550e8400-e29b-41d4-a716-446655440000/avatar",
"updatedAt": "2025-01-14T16:20:59Z",
"workspaceId": "550e8400-e29b-41d4-a716-446655440000"
},
"billingContact": {
"activeDiscount": "string",
"addressLine1": "123 Main St",
"addressLine2": "123 Main St",
"city": "Berlin",
"country": "DE",
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"defaultPaymentCardNumberLastFourDigits": "1234",
"defaultPaymentMethod": "acss_debit",
"defaultPaymentMethodCardBrand": "amex",
"email": "max.mustermann@neuroflash.com",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"importedFromLegacyCustomerId": 12345,
"name": "Max Mustermann",
"postalCode": "12345",
"state": "Schleswig-Holstein",
"stripeCustomerId": "cus_12345abcdef",
"updatedAt": "2025-01-14T16:20:59Z"
},
"currentSubscription": {
"_embedded": {
"availableWords": 500,
"newPricingPlan": {
"active": "...",
"billingInterval": "...",
"categoryId": "...",
"displayName": "...",
"id": "...",
"importedFromLegacyId": "...",
"isDefault": "...",
"priceInEuro": "...",
"pricePerCurrency": "...",
"stripeBillingPortalEnabled": "...",
"stripePriceId": "...",
"stripeTrackTokenMeter": "...",
"stripeTrackUsage": "...",
"tier": "...",
"trialDays": "..."
},
"pricingPlan": {
"active": "...",
"billingInterval": "...",
"categoryId": "...",
"displayName": "...",
"id": "...",
"importedFromLegacyId": "...",
"isDefault": "...",
"priceInEuro": "...",
"pricePerCurrency": "...",
"stripeBillingPortalEnabled": "...",
"stripePriceId": "...",
"stripeTrackTokenMeter": "...",
"stripeTrackUsage": "...",
"tier": "...",
"trialDays": "..."
},
"pricingPlanCategory": {
"displayName": "...",
"id": "...",
"translationKey": "..."
}
},
"active": true,
"activeDiscounts": [
"string"
],
"availableWords": 500,
"bonusWords": 1000,
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"currency": "aed",
"endDate": "string",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"importedFromLegacyCustomerId": 12345,
"isGracePeriod": false,
"isTrial": false,
"limitRenewalDate": "string",
"nextSubscriptionCycleStart": "2024-01-01T00:00:00Z",
"paymentCardNumberLastFourDigits": "4242",
"paymentMethodCardBrand": "amex",
"paymentPaused": false,
"paymentType": "acss_debit",
"pricingPlanId": "18d0045a-5850-4bf4-8d5d-3dc8684e2bb2",
"pricingPlanWords": 10000,
"sepaPaymentFailed": false,
"spilloverWords": 500,
"stripeStatus": "active",
"stripeSubscriptionId": "sub_12345abcdef",
"stripeSubscriptionItemId": "sub_item_ad909w0",
"trialEndsAt": "2023-12-31T23:59:59Z",
"trialStartedAt": "string",
"updatedAt": "2025-01-14T16:20:59Z",
"usedWords": 5000,
"workspaceId": "550e8400-e29b-41d4-a716-446655440000"
}
},
"billingContactId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"currentSubscriptionId": "550e8400-e29b-41d4-a716-446655440000",
"firstMemberInvitedAt": "2022-01-01T00:00:00Z",
"firstPaidSubscriptionAt": "string",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"importedFromLegacyCustomerId": 177,
"importedFromLegacyTeamId": 187,
"key": "NF-GK352",
"keyIndex": 57,
"name": "Online Marketing Team",
"trialStartedAt": "2014-01-02T14:22:00Z",
"updatedAt": "2025-01-14T16:20:59Z"
}
Update
PUT
/v1/workspaces/{workspaceId}Pfadparameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
workspaceId | string | Ja | Arbeitsbereich-ID |
Anfrage-Body
FeldTypErforderlichBeschreibung
namestringJaName des ArbeitsbereichsAntwort
FeldTypBeschreibung
_embeddedobject
avatarobject
_embeddedobject
signedUrlstringcreatedAtstringcreatedByUserIdstringfileNamestringidstringsignedUrlstringstorageKeystringupdatedAtstringworkspaceIdstringbillingContactobject
activeDiscountstringSchreibgeschützt von Stripe synchronisiert: true, wenn für diesen Stripe-Kunden ein Rabatt aktiv istaddressLine1stringSchreibgeschützt von Stripe synchronisiert: Erste Zeile der Adresse des AbrechnungskontaktsaddressLine2stringSchreibgeschützt von Stripe synchronisiert: Zweite Zeile der Adresse des AbrechnungskontaktscitystringSchreibgeschützt von Stripe synchronisiert: Stadt des AbrechnungskontaktscountrystringSchreibgeschützt von Stripe synchronisiert: Land des AbrechnungskontaktscreatedAtstringcreatedByUserIdstringdefaultPaymentCardNumberLastFourDigitsstringdefaultPaymentMethodstringdefaultPaymentMethodCardBrandstringemailstringE-Mail-Adresse des AbrechnungskontaktsidstringimportedFromLegacyCustomerIdintegerVeraltet: nur erforderlich, solange der Import von der Legacy-API noch aktiv ist ID des Legacy-Kunden, von dem dies importiert wurdenamestringName des AbrechnungskontaktspostalCodestringSchreibgeschützt, synchronisiert von Stripe: Postleitzahl des AbrechnungskontaktsstatestringSchreibgeschützt, synchronisiert von Stripe: Bundesland des AbrechnungskontaktsstripeCustomerIdstringStripe-Kunden-ID für Abrechnungszwecke. Könnte optional werden, wenn wir andere Zahlungsanbieter hinzufügenupdatedAtstringcurrentSubscriptionobject
_embeddedobject
availableWordsintegerVeraltet: Entfernen, sobald das Frontend es nicht mehr benötigt Veraltet, zur Root-Ebene verschobennewPricingPlanobject
activebooleanAuf true setzen, wenn dieser Tarif bei bestehenden und neuen Abonnements konfiguriert werden kannbillingIntervalstringcategoryIdstringID der Kategorie, zu der dieser Tarif gehörtdisplayNamestringName für interne Zwecke wie die Admin-UI oder HubSpot. Sollte nicht für Kunden angezeigt werdenidstringID des TarifsimportedFromLegacyIdintegerisDefaultbooleanIst dies der Standardtarif für neue Kunden?priceInEuronumberBetrag, den der Kunde für dieses Abonnement zahlen musspricePerCurrencyobjectEine Zuordnung von String-Schlüsseln zu Float-WertenstripeBillingPortalEnabledbooleanTrue, wenn Abonnements mit diesem Tarif selbst im Stripe-Abrechnungsportal verwaltet werden könnenstripePriceIdstringID des Preises in StripestripeTrackTokenMeterstringstripeTrackUsagebooleanVeraltettierintegertrialDaysintegerAnzahl der Testtage, die für diesen Tarif zulässig sindpricingPlanobject
activebooleanAuf true setzen, wenn dieser Tarif bei bestehenden und neuen Abonnements konfiguriert werden kannbillingIntervalstringcategoryIdstringID der Kategorie, zu der dieser Tarif gehörtdisplayNamestringName für interne Zwecke wie die Admin-UI oder HubSpot. Sollte nicht für Kunden angezeigt werdenidstringID des TarifsimportedFromLegacyIdintegerisDefaultbooleanIst dies der Standardtarif für neue Kunden?priceInEuronumberBetrag, den der Kunde für dieses Abonnement zahlen musspricePerCurrencyobjectEine Zuordnung von String-Schlüsseln zu Float-WertenstripeBillingPortalEnabledbooleanTrue, wenn Abonnements mit diesem Tarif selbst im Stripe-Abrechnungsportal verwaltet werden könnenstripePriceIdstringID des Preises in StripestripeTrackTokenMeterstringstripeTrackUsagebooleanVeraltettierintegertrialDaysintegerAnzahl der Testtage, die für diesen Tarif zulässig sindpricingPlanCategoryobject
displayNamestringidstringtranslationKeystringactivebooleanFlag, das anzeigt, ob das Abonnement aktiv ist. Abonnements können inaktiv werden, wenn sie pausiert werden oder mehr Mitglieder haben, als der aktuelle Tarif zulässtactiveDiscountsarray<string>Schreibgeschützt, synchronisiert von Stripe: true, wenn ein Rabatt für dieses Stripe-Abonnement aktiv istavailableWordsintegerAnzahl der Wörter, die in diesem Arbeitsbereich in der aktuellen Abrechnungsperiode noch verwendet werden könnenbonusWordsintegerVeraltet: wird in eine separate Limits-Tabelle/Service verschoben. Kann derzeit von Administratoren verwaltet werden Zusätzliche Bonuswörter, die zur Verfügung stehencreatedAtstringcreatedByUserIdstringcurrencystringendDatestringSchreibgeschützt, synchronisiert von Stripe: Datum, an dem dieses Abonnement automatisch gekündigt wirdidstringimportedFromLegacyCustomerIdintegerVeraltet: nur erforderlich, solange der Import von der Legacy-API noch aktiv ist ID des Legacy-Kunden, von dem dies importiert wurdeisGracePeriodbooleanTrue, wenn das Abonnement zu einem zukünftigen Datum gekündigt wirdisTrialbooleanTrue, wenn dies derzeit ein Testzeitraum istlimitRenewalDatestringNächstes Datum, an dem die Limits (wie verfügbare Wörter, verfügbare Bilder usw.) zurückgesetzt werden. Dies geschieht jeden Monat, ab dem Start des AbonnementsnextSubscriptionCycleStartstringSchreibgeschützt, synchronisiert von Stripe: Zeitstempel, wenn der nächste Abrechnungszyklus beginnt. Dies ist NICHT unbedingt der Zeitstempel, an dem wir die Limits in unserem System zurücksetzen, da wir sie monatlich zurücksetzen, auch wenn dies ein Jahresplan istpaymentCardNumberLastFourDigitsstringSchreibgeschützt, synchronisiert von Stripe: Letzte vier Ziffern der Zahlungskartennummer. Verwendet die Standardzahlung des Abonnements mit Fallback zur Zahlung aus der letzten RechnungpaymentMethodCardBrandstringpaymentPausedbooleanSchreibgeschützt, synchronisiert von Stripe: true, wenn die Zahlungserfassung für dieses Abonnement derzeit pausiert ist. Obwohl Stripe beabsichtigt, dass diese Abonnements aktiv bleiben und einfach für eine Weile kostenlos sind, behandeln wir Abonnements mit pausierter Zahlung als inaktivpaymentTypestringpricingPlanIdstringpricingPlanWordsintegerVeraltet: Diese Felder werden intern verwaltet, werden aber in die Limit-Struktur verschoben Veraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben Wie viele Wörter der Tarifplan aus diesem Abonnement erlaubt.sepaPaymentFailedbooleanSchreibgeschützt, synchronisiert von Stripe: Flag, das angibt, ob die SEPA-Zahlung fehlgeschlagen istspilloverWordsintegerVeraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben. Wird verwendet, um die verfügbaren Wörter im nächsten Monat zu berechnen, da Sie überlaufende Wörter aus dem letzten Monat nur behalten können, diese aber nicht über mehrere Monate hinweg akkumulieren können Wörter aus dem vorherigen Monat übertragenstripeStatusstringstripeSubscriptionIdstringStripe-Abonnement-IDstripeSubscriptionItemIdstringID des Abonnement-Elements in Stripe (Abonnements sollten nur ein Element haben)trialEndsAtstringSchreibgeschützt, synchronisiert von Stripe: Zeitstempel, wenn die Testphase endettrialStartedAtstringSchreibgeschützt, synchronisiert von Stripe: Datum, an dem die Testphase begonnen hat, falls eine laufenupdatedAtstringusedWordsintegerVeraltet: wird in eine separate Limits-Tabelle/einen separaten Service verschoben Wie viele Wörter in diesem Arbeitsbereich im aktuellen Monat verwendet wurdenworkspaceIdstringID des Arbeitsbereichs, zu dem dieses Abonnement gehörtbillingContactIdstringID des Abrechnungskontakts für diesen ArbeitsbereichcreatedAtstringcreatedByUserIdstringcurrentSubscriptionIdstringID des aktuellen Abonnements für diesen ArbeitsbereichfirstMemberInvitedAtstringVeraltet Zeitstempel, wann das erste Mitglied zum Arbeitsbereich eingeladen wurdefirstPaidSubscriptionAtstringFalls dieser Arbeitsbereich jemals ein kostenpflichtiges Abonnement hatte, enthält dies das Datum, an dem das erste begannidstringimportedFromLegacyCustomerIdintegerVeraltet Einige Kunden haben kein zugewiesenes Team im Legacy-System als Besitzer, benötigen aber einen Arbeitsbereich, in den wir das Abonnement importieren könnenimportedFromLegacyTeamIdintegerVeraltet: Felder, die derzeit noch für das Legacy-System benötigt werden ID des Legacy-Teams, aus dem dieser Arbeitsbereich importiert wurdekeystringFür Menschen lesbare eindeutige Kennung des ArbeitsbereichskeyIndexintegerEindeutig auto-generierter Index, der verwendet wird, um einen eindeutigen Schlüssel zu generierennamestringName des ArbeitsbereichstrialStartedAtstringFalls dieser Arbeitsbereich jemals ein Abonnement mit einer Testphase hatte, enthält dies den Zeitpunkt, wann sie gestartet wurdeupdatedAtstringBeispiel
- cURL
- Python
- Node.js
- Go
curl -X PUT "https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string"
}'
import requests
response = requests.put(
f"https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}",
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
json={
"name": "string"
},
).json()
const response = await fetch(
`https://app.neuroflash.com/api/workspace-service/v1/workspaces/${workspaceId}`,
{
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "string"
}),
}
).then((r) => r.json());
body, _ := json.Marshal(map[string]any{
"name": "string",
})
req, _ := http.NewRequest("PUT", "https://app.neuroflash.com/api/workspace-service/v1/workspaces/"+workspaceID+"", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
Antwort:
{
"_embedded": {
"avatar": {
"_embedded": {
"signedUrl": "https://storage.googleapis.com/workspaces/550e8400-e29b-41d4-a716-446655440000/avatar/113c0b32-ed6c-4421-b7da-d1faf238eb56.jpg"
},
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"fileName": "a2G8Sa7Mn47Je0Lm.png",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"signedUrl": "https://storage.googleapis.com/workspaces/550e8400-e29b-41d4-a716-446655440000/avatar/113c0b32-ed6c-4421-b7da-d1faf238eb56.jpg",
"storageKey": "workspaces/550e8400-e29b-41d4-a716-446655440000/avatar",
"updatedAt": "2025-01-14T16:20:59Z",
"workspaceId": "550e8400-e29b-41d4-a716-446655440000"
},
"billingContact": {
"activeDiscount": "string",
"addressLine1": "123 Main St",
"addressLine2": "123 Main St",
"city": "Berlin",
"country": "DE",
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"defaultPaymentCardNumberLastFourDigits": "1234",
"defaultPaymentMethod": "acss_debit",
"defaultPaymentMethodCardBrand": "amex",
"email": "max.mustermann@neuroflash.com",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"importedFromLegacyCustomerId": 12345,
"name": "Max Mustermann",
"postalCode": "12345",
"state": "Schleswig-Holstein",
"stripeCustomerId": "cus_12345abcdef",
"updatedAt": "2025-01-14T16:20:59Z"
},
"currentSubscription": {
"_embedded": {
"availableWords": 500,
"newPricingPlan": {
"active": "...",
"billingInterval": "...",
"categoryId": "...",
"displayName": "...",
"id": "...",
"importedFromLegacyId": "...",
"isDefault": "...",
"priceInEuro": "...",
"pricePerCurrency": "...",
"stripeBillingPortalEnabled": "...",
"stripePriceId": "...",
"stripeTrackTokenMeter": "...",
"stripeTrackUsage": "...",
"tier": "...",
"trialDays": "..."
},
"pricingPlan": {
"active": "...",
"billingInterval": "...",
"categoryId": "...",
"displayName": "...",
"id": "...",
"importedFromLegacyId": "...",
"isDefault": "...",
"priceInEuro": "...",
"pricePerCurrency": "...",
"stripeBillingPortalEnabled": "...",
"stripePriceId": "...",
"stripeTrackTokenMeter": "...",
"stripeTrackUsage": "...",
"tier": "...",
"trialDays": "..."
},
"pricingPlanCategory": {
"displayName": "...",
"id": "...",
"translationKey": "..."
}
},
"active": true,
"activeDiscounts": [
"string"
],
"availableWords": 500,
"bonusWords": 1000,
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"currency": "aed",
"endDate": "string",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"importedFromLegacyCustomerId": 12345,
"isGracePeriod": false,
"isTrial": false,
"limitRenewalDate": "string",
"nextSubscriptionCycleStart": "2024-01-01T00:00:00Z",
"paymentCardNumberLastFourDigits": "4242",
"paymentMethodCardBrand": "amex",
"paymentPaused": false,
"paymentType": "acss_debit",
"pricingPlanId": "18d0045a-5850-4bf4-8d5d-3dc8684e2bb2",
"pricingPlanWords": 10000,
"sepaPaymentFailed": false,
"spilloverWords": 500,
"stripeStatus": "active",
"stripeSubscriptionId": "sub_12345abcdef",
"stripeSubscriptionItemId": "sub_item_ad909w0",
"trialEndsAt": "2023-12-31T23:59:59Z",
"trialStartedAt": "string",
"updatedAt": "2025-01-14T16:20:59Z",
"usedWords": 5000,
"workspaceId": "550e8400-e29b-41d4-a716-446655440000"
}
},
"billingContactId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2025-01-14T16:20:59Z",
"createdByUserId": "b0920767-2e30-48d3-80ce-268810bc433a",
"currentSubscriptionId": "550e8400-e29b-41d4-a716-446655440000",
"firstMemberInvitedAt": "2022-01-01T00:00:00Z",
"firstPaidSubscriptionAt": "string",
"id": "113c0b32-ed6c-4421-b7da-d1faf238eb56",
"importedFromLegacyCustomerId": 177,
"importedFromLegacyTeamId": 187,
"key": "NF-GK352",
"keyIndex": 57,
"name": "Online Marketing Team",
"trialStartedAt": "2014-01-02T14:22:00Z",
"updatedAt": "2025-01-14T16:20:59Z"
}
Delete
DELETE
/v1/workspaces/{workspaceId}Pfadparameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
workspaceId | string | Ja | Arbeitsbereich-ID |
Beispiel
- cURL
- Python
- Node.js
- Go
curl -X DELETE "https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
import requests
requests.delete(
f"https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}",
headers={"Authorization": f"Bearer {token}"},
)
await fetch(
`https://app.neuroflash.com/api/workspace-service/v1/workspaces/${workspaceId}`,
{
method: "DELETE",
headers: { Authorization: `Bearer ${token}` },
}
);
req, _ := http.NewRequest("DELETE", "https://app.neuroflash.com/api/workspace-service/v1/workspaces/"+workspaceID+"", nil)
req.Header.Set("Authorization", "Bearer "+token)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()