Abrechnung
Basis-URL: https://app.neuroflash.com/api/workspace-service
Verwalten Sie Abrechnungskontakte und greifen Sie auf das Stripe-Abrechnungsportal zu.
Erstellt eine Stripe-Checkout-Sitzung, mit der ein Kunde das Abonnement seines Arbeitsbereichs in einem eingebetteten Modal auf einen anderen Preis aktualisieren kann
POST
/v1/workspaces/{workspaceId}/billing-contacts/{billingContactId}/stripe-checkout-sessionsPfadparameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
workspaceId | string | Ja | Arbeitsbereichs-ID |
billingContactId | string | Ja | Abrechnungskontakt-ID |
Anfrage-Body
FeldTypErforderlichBeschreibung
callbackUrlstringJaURL, zu der nach erfolgreichem Checkout umgeleitet werden solllanguagestringNeinSprache, in der die Checkout-Sitzung geöffnet werden soll. Standardmäßig die Sprache des authentifizierten KundenlegacyPricingPlanIdintegerNeinveraltete ID des Preisplans, für den ein Abonnement erstellt werden sollpricingPlanIdstringNeinAntwort
FeldTypBeschreibung
_embeddedobject
couponobject
_embeddedobject
pricingPlanobject
activebooleanauf true gesetzt, wenn dieser Tarif in bestehenden und neuen Abonnements konfiguriert werden kannbillingIntervalstringcategoryIdstringID der Kategorie, zu der dieser Tarif gehörtdisplayNamestringName für interne Zwecke wie die Admin-Benutzeroberfläche oder Hubspot. Sollte nicht für Kunden angezeigt werdenidstringID des TarifsimportedFromLegacyIdintegerisDefaultbooleanIst dies der Standard-Tarif für neue Kunden?priceInEuronumberwie viel der Kunde für dieses Abonnement bezahlen musspricePerCurrencyobjectEine Zuordnung von Zeichenkettenschlüsseln zu GleitkommawertenstripeBillingPortalEnabledbooleantrue, wenn Abonnements mit diesem Tarif im Stripe-Abrechnungsportal selbst verwaltet werden könnenstripePriceIdstringID des Preises in StripestripeTrackUsagebooleanwenn true, sollte die Nutzung für Abonnements mit diesem Tarif in Stripe nachverfolgt werdentierintegertrialDaysintegerwie viele Testtage für diesen Tarif zulässig sindpricingPlanCategoryobject
displayNamestringidstringtranslationKeystringdiscountPercentagenumberlegacyPricingPlanIdintegerpricingPlanIdstringtranslationKeystringcallbackUrlstringURL, zu der nach erfolgreichem Checkout umgeleitet werden solllanguagestringSprache, in der die Checkout-Sitzung geöffnet werden soll. Standardmäßig die Sprache des authentifizierten KundenlegacyPricingPlanIdintegerveraltete ID des Preisplans, für den ein Abonnement erstellt werden sollpricingPlanIdstringstatusstringstripeClientSecretstringClient Secret für diese Checkout-Sitzung. Wird nur direkt nach der Erstellung gesetztstripePriceIdstringStripe ID des Preises aus dem neuen Abonnement, das ausgecheckt wirdstripeSubscriptionIdstringID des Stripe-Abonnements, das in diesem Checkout abonniert wirdBeispiel
- cURL
- Python
- Node.js
- Go
curl -X POST "https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}/billing-contacts/{billing_contact_id}/stripe-checkout-sessions" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"callbackUrl": "string",
"language": "string",
"legacyPricingPlanId": 0,
"pricingPlanId": "string"
}'
import requests
response = requests.post(
f"https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}/billing-contacts/{billing_contact_id}/stripe-checkout-sessions",
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
json={
"callbackUrl": "string",
"language": "string",
"legacyPricingPlanId": 0,
"pricingPlanId": "string"
},
).json()
const response = await fetch(
`https://app.neuroflash.com/api/workspace-service/v1/workspaces/${workspaceId}/billing-contacts/${billingContactId}/stripe-checkout-sessions`,
{
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"callbackUrl": "string",
"language": "string",
"legacyPricingPlanId": 0,
"pricingPlanId": "string"
}),
}
).then((r) => r.json());
body, _ := json.Marshal(map[string]any{
"callbackUrl": "string",
"language": "string",
"legacyPricingPlanId": 0,
"pricingPlanId": "string",
})
req, _ := http.NewRequest("POST", "https://app.neuroflash.com/api/workspace-service/v1/workspaces/"+workspaceID+"/billing-contacts/"+billingContactID+"/stripe-checkout-sessions", 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": {
"coupon": {
"_embedded": {
"pricingPlan": {
"active": "...",
"billingInterval": "...",
"categoryId": "...",
"displayName": "...",
"id": "...",
"importedFromLegacyId": "...",
"isDefault": "...",
"priceInEuro": "...",
"pricePerCurrency": "...",
"stripeBillingPortalEnabled": "...",
"stripePriceId": "...",
"stripeTrackUsage": "...",
"tier": "...",
"trialDays": "..."
},
"pricingPlanCategory": {
"displayName": "...",
"id": "...",
"translationKey": "..."
}
},
"discountPercentage": 0,
"legacyPricingPlanId": 0,
"pricingPlanId": "string",
"translationKey": "string"
}
},
"callbackUrl": "https://app.neuroflash.com/payment-callback?session_id={CHECKOUT_SESSION_ID}",
"language": "de",
"legacyPricingPlanId": 150,
"pricingPlanId": "string",
"status": "complete",
"stripeClientSecret": "string",
"stripePriceId": "string",
"stripeSubscriptionId": "string"
}
Aktuellen Abrechnungskontakt für einen Arbeitsbereich abrufen
GET
/v1/workspaces/{workspaceId}/billing-contacts/{billingContactId}Pfadparameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
workspaceId | string | Ja | Arbeitsbereichs-ID |
Antwort
FeldTypBeschreibung
activeDiscountstringschreibgeschützt von Stripe synchronisiert: true, wenn ein Rabatt für diesen Stripe-Kunden aktiv istaddressLine1stringschreibgeschützt von Stripe synchronisiert: erste Zeile der Adressen des AbrechnungskontaktsaddressLine2stringschreibgeschützt von Stripe synchronisiert: zweite Zeile der Adressen des Abrechnungskontaktscitystringschreibgeschützt von Stripe synchronisiert: Stadt des Abrechnungskontaktscountrystringschreibgeschützt von Stripe synchronisiert: Land des AbrechnungskontaktscreatedAtstringcreatedByUserIdstringdefaultPaymentCardNumberLastFourDigitsstringdefaultPaymentMethodstringdefaultPaymentMethodCardBrandstringemailstringE-Mail-Adresse des AbrechnungskontaktsidstringimportedFromLegacyCustomerIdintegerVeraltet: nur erforderlich, während der Import aus der Legacy-API noch aktiv istnamestringName des AbrechnungskontaktspostalCodestringschreibgeschützt von Stripe synchronisiert: Postleitzahl des Abrechnungskontaktsstatestringschreibgeschützt von Stripe synchronisiert: Bundesland des AbrechnungskontaktsstripeCustomerIdstringStripe-Kunden-ID für Abrechnungszwecke. Könnte optional werden, wenn wir weitere Zahlungsanbieter hinzufügenupdatedAtstringBeispiel
- cURL
- Python
- Node.js
- Go
curl "https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}/billing-contacts/{billing_contact_id}" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
import requests
response = requests.get(
f"https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}/billing-contacts/{billing_contact_id}",
headers={"Authorization": f"Bearer {token}"},
).json()
const response = await fetch(
`https://app.neuroflash.com/api/workspace-service/v1/workspaces/${workspaceId}/billing-contacts/${billingContactId}`,
{ headers: { Authorization: `Bearer ${token}` } }
).then((r) => r.json());
req, _ := http.NewRequest("GET", "https://app.neuroflash.com/api/workspace-service/v1/workspaces/"+workspaceID+"/billing-contacts/"+billingContactID+"", nil)
req.Header.Set("Authorization", "Bearer "+token)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
Antwort:
{
"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"
}
erstellt eine Checkout-Sitzung in Stripe. Checkout-Sitzungen können verwendet werden, um einem Kunden den Wechsel von Preisplänen mit einer eingebetteten Ansicht zu ermöglichen, was praktischer ist als eine Umleitung zum Stripe-Portal
GET
/v1/workspaces/{workspaceId}/billing-contacts/{billingContactId}/stripe-checkout-sessions/{sessionId}Pfadparameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
workspaceId | string | Ja | Arbeitsbereichs-ID |
billingContactId | string | Ja | Abrechnungskontakt-ID |
sessionId | string | Ja | Stripe Session ID |
Antwort
FeldTypBeschreibung
_embeddedobject
couponobject
_embeddedobject
pricingPlanobject
activebooleanauf true gesetzt, wenn dieser Tarif in bestehenden und neuen Abonnements konfiguriert werden kannbillingIntervalstringcategoryIdstringID der Kategorie, zu der dieser Tarif gehörtdisplayNamestringName für interne Zwecke wie die Admin-Benutzeroberfläche oder Hubspot. Sollte nicht für Kunden angezeigt werdenidstringID des TarifsimportedFromLegacyIdintegerisDefaultbooleanIst dies der Standard-Tarif für neue Kunden?priceInEuronumberwie viel der Kunde für dieses Abonnement bezahlen musspricePerCurrencyobjectEine Zuordnung von Zeichenkettenschlüsseln zu GleitkommawertenstripeBillingPortalEnabledbooleantrue, wenn Abonnements mit diesem Tarif im Stripe-Abrechnungsportal selbst verwaltet werden könnenstripePriceIdstringID des Preises in StripestripeTrackUsagebooleanwenn true, sollte die Nutzung für Abonnements mit diesem Tarif in Stripe nachverfolgt werdentierintegertrialDaysintegerwie viele Testtage für diesen Tarif zulässig sindpricingPlanCategoryobject
displayNamestringidstringtranslationKeystringdiscountPercentagenumberlegacyPricingPlanIdintegerpricingPlanIdstringtranslationKeystringcallbackUrlstringURL, zu der nach erfolgreichem Checkout umgeleitet werden solllanguagestringSprache, in der die Checkout-Sitzung geöffnet werden soll. Standardmäßig die Sprache des authentifizierten KundenlegacyPricingPlanIdintegerveraltete ID des Preisplans, für den ein Abonnement erstellt werden sollpricingPlanIdstringstatusstringstripeClientSecretstringClient Secret für diese Checkout-Sitzung. Wird nur direkt nach der Erstellung gesetztstripePriceIdstringStripe ID des Preises aus dem neuen Abonnement, das ausgecheckt wirdstripeSubscriptionIdstringID des Stripe-Abonnements, das in diesem Checkout abonniert wirdBeispiel
- cURL
- Python
- Node.js
- Go
curl "https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}/billing-contacts/{billing_contact_id}/stripe-checkout-sessions/{session_id}" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
import requests
response = requests.get(
f"https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}/billing-contacts/{billing_contact_id}/stripe-checkout-sessions/{session_id}",
headers={"Authorization": f"Bearer {token}"},
).json()
const response = await fetch(
`https://app.neuroflash.com/api/workspace-service/v1/workspaces/${workspaceId}/billing-contacts/${billingContactId}/stripe-checkout-sessions/${sessionId}`,
{ headers: { Authorization: `Bearer ${token}` } }
).then((r) => r.json());
req, _ := http.NewRequest("GET", "https://app.neuroflash.com/api/workspace-service/v1/workspaces/"+workspaceID+"/billing-contacts/"+billingContactID+"/stripe-checkout-sessions/"+sessionID+"", nil)
req.Header.Set("Authorization", "Bearer "+token)
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
Antwort:
{
"_embedded": {
"coupon": {
"_embedded": {
"pricingPlan": {
"active": "...",
"billingInterval": "...",
"categoryId": "...",
"displayName": "...",
"id": "...",
"importedFromLegacyId": "...",
"isDefault": "...",
"priceInEuro": "...",
"pricePerCurrency": "...",
"stripeBillingPortalEnabled": "...",
"stripePriceId": "...",
"stripeTrackUsage": "...",
"tier": "...",
"trialDays": "..."
},
"pricingPlanCategory": {
"displayName": "...",
"id": "...",
"translationKey": "..."
}
},
"discountPercentage": 0,
"legacyPricingPlanId": 0,
"pricingPlanId": "string",
"translationKey": "string"
}
},
"callbackUrl": "https://app.neuroflash.com/payment-callback?session_id={CHECKOUT_SESSION_ID}",
"language": "de",
"legacyPricingPlanId": 150,
"pricingPlanId": "string",
"status": "complete",
"stripeClientSecret": "string",
"stripePriceId": "string",
"stripeSubscriptionId": "string"
}
Abrechnungskontakt aktualisieren
PUT
/v1/workspaces/{workspaceId}/billing-contacts/{billingContactId}Abrechnungskontakt aktualisieren
Anfrage-Body
FeldTypErforderlichBeschreibung
activeDiscountstringNeinschreibgeschützt von Stripe synchronisiert: true, wenn ein Rabatt für diesen Stripe-Kunden aktiv istaddressLine1stringNeinschreibgeschützt von Stripe synchronisiert: erste Zeile der Adressen des AbrechnungskontaktsaddressLine2stringNeinschreibgeschützt von Stripe synchronisiert: zweite Zeile der Adressen des AbrechnungskontaktscitystringNeinschreibgeschützt von Stripe synchronisiert: Stadt des AbrechnungskontaktscountrystringNeinschreibgeschützt von Stripe synchronisiert: Land des AbrechnungskontaktsdefaultPaymentCardNumberLastFourDigitsstringNeindefaultPaymentMethodstringNeindefaultPaymentMethodCardBrandstringNeinemailstringJaE-Mail-Adresse des AbrechnungskontaktsnamestringJaName des AbrechnungskontaktspostalCodestringNeinschreibgeschützt von Stripe synchronisiert: Postleitzahl des AbrechnungskontaktsstatestringNeinschreibgeschützt von Stripe synchronisiert: Bundesland des AbrechnungskontaktsAntwort
FeldTypBeschreibung
activeDiscountstringschreibgeschützt von Stripe synchronisiert: true, wenn ein Rabatt für diesen Stripe-Kunden aktiv istaddressLine1stringschreibgeschützt von Stripe synchronisiert: erste Zeile der Adressen des AbrechnungskontaktsaddressLine2stringschreibgeschützt von Stripe synchronisiert: zweite Zeile der Adressen des Abrechnungskontaktscitystringschreibgeschützt von Stripe synchronisiert: Stadt des Abrechnungskontaktscountrystringschreibgeschützt von Stripe synchronisiert: Land des AbrechnungskontaktscreatedAtstringcreatedByUserIdstringdefaultPaymentCardNumberLastFourDigitsstringdefaultPaymentMethodstringdefaultPaymentMethodCardBrandstringemailstringE-Mail-Adresse des AbrechnungskontaktsidstringimportedFromLegacyCustomerIdintegerVeraltet: nur erforderlich, während der Import aus der Legacy-API noch aktiv istnamestringName des AbrechnungskontaktspostalCodestringschreibgeschützt von Stripe synchronisiert: Postleitzahl des Abrechnungskontaktsstatestringschreibgeschützt von Stripe synchronisiert: Bundesland des AbrechnungskontaktsstripeCustomerIdstringStripe-Kunden-ID für Abrechnungszwecke. Könnte optional werden, wenn wir weitere Zahlungsanbieter hinzufügenupdatedAtstringBeispiel
- cURL
- Python
- Node.js
- Go
curl -X PUT "https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}/billing-contacts/{billing_contact_id}" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"activeDiscount": "string",
"addressLine1": "string",
"addressLine2": "string",
"city": "string",
"country": "string",
"defaultPaymentCardNumberLastFourDigits": "string",
"defaultPaymentMethod": "string",
"defaultPaymentMethodCardBrand": "string",
"email": "string",
"name": "string",
"postalCode": "string",
"state": "string"
}'
import requests
response = requests.put(
f"https://app.neuroflash.com/api/workspace-service/v1/workspaces/{workspace_id}/billing-contacts/{billing_contact_id}",
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
json={
"activeDiscount": "string",
"addressLine1": "string",
"addressLine2": "string",
"city": "string",
"country": "string",
"defaultPaymentCardNumberLastFourDigits": "string",
"defaultPaymentMethod": "string",
"defaultPaymentMethodCardBrand": "string",
"email": "string",
"name": "string",
"postalCode": "string",
"state": "string"
},
).json()
const response = await fetch(
`https://app.neuroflash.com/api/workspace-service/v1/workspaces/${workspaceId}/billing-contacts/${billingContactId}`,
{
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"activeDiscount": "string",
"addressLine1": "string",
"addressLine2": "string",
"city": "string",
"country": "string",
"defaultPaymentCardNumberLastFourDigits": "string",
"defaultPaymentMethod": "string",
"defaultPaymentMethodCardBrand": "string",
"email": "string",
"name": "string",
"postalCode": "string",
"state": "string"
}),
}
).then((r) => r.json());
body, _ := json.Marshal(map[string]any{
"activeDiscount": "string",
"addressLine1": "string",
"addressLine2": "string",
"city": "string",
"country": "string",
"defaultPaymentCardNumberLastFourDigits": "string",
"defaultPaymentMethod": "string",
"defaultPaymentMethodCardBrand": "string",
"email": "string",
"name": "string",
"postalCode": "string",
"state": "string",
})
req, _ := http.NewRequest("PUT", "https://app.neuroflash.com/api/workspace-service/v1/workspaces/"+workspaceID+"/billing-contacts/"+billingContactID+"", 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:
{
"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"
}