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 in seinem Arbeitsbereich zu einem anderen Preis in einem eingebetteten Modal erstellen/aktualisieren kann
POST
/v1/workspaces/{workspaceId}/billing-contacts/{billingContactId}/stripe-checkout-sessionsPfadparameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
workspaceId | string | Ja | Arbeitsbereich-ID |
billingContactId | string | Ja | Abrechnungskontakt-ID |
Anfrage-Body
FeldTypErforderlichBeschreibung
callbackUrlstringJaURL, zu der nach erfolgreichem Checkout weitergeleitet werden solllanguagestringNeinSprache, in der die Checkout-Sitzung geöffnet werden soll. Standardmäßig die Sprache des authentifizierten KundenlegacyPricingPlanIdintegerNeinveraltete ID des Tarifs, für den ein Abonnement erstellt werden sollpricingPlanIdstringNeinAntwort
FeldTypBeschreibung
_embeddedobject
couponobject
_embeddedobject
pricingPlanobject
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
displayNamestringidstringtranslationKeystringdiscountPercentagenumberlegacyPricingPlanIdintegerpricingPlanIdstringtranslationKeystringcallbackUrlstringURL, zu der nach erfolgreichem Checkout weitergeleitet werden solllanguagestringSprache, in der die Checkout-Sitzung geöffnet werden soll. Standardmäßig die Sprache des authentifizierten KundenlegacyPricingPlanIdintegerveraltete ID des Tarifs, für den ein Abonnement erstellt werden sollpricingPlanIdstringstatusstringstripeClientSecretstringClient-Geheimnis 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": "...",
"stripeTrackTokenMeter": "...",
"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 | Arbeitsbereich-ID |
Antwort
FeldTypBeschreibung
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ü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 einen Kunden mit einer eingebetteten Ansicht zum Wechsel von Tarifen zu bewegen, was bequemer 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 | Arbeitsbereich-ID |
billingContactId | string | Ja | Abrechnungskontakt-ID |
sessionId | string | Ja | Stripe-Sitzungs-ID |
Antwort
FeldTypBeschreibung
_embeddedobject
couponobject
_embeddedobject
pricingPlanobject
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
displayNamestringidstringtranslationKeystringdiscountPercentagenumberlegacyPricingPlanIdintegerpricingPlanIdstringtranslationKeystringcallbackUrlstringURL, zu der nach erfolgreichem Checkout weitergeleitet werden solllanguagestringSprache, in der die Checkout-Sitzung geöffnet werden soll. Standardmäßig die Sprache des authentifizierten KundenlegacyPricingPlanIdintegerveraltete ID des Tarifs, für den ein Abonnement erstellt werden sollpricingPlanIdstringstatusstringstripeClientSecretstringClient-Geheimnis 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": "...",
"stripeTrackTokenMeter": "...",
"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"
}
Einen Abrechnungskontakt aktualisieren
PUT
/v1/workspaces/{workspaceId}/billing-contacts/{billingContactId}Einen Abrechnungskontakt aktualisieren
Anfrage-Body
FeldTypErforderlichBeschreibung
activeDiscountstringNeinSchreibgeschützt von Stripe synchronisiert: true, wenn für diesen Stripe-Kunden ein Rabatt aktiv istaddressLine1stringNeinSchreibgeschützt von Stripe synchronisiert: Erste Zeile der Adresse des AbrechnungskontaktsaddressLine2stringNeinSchreibgeschützt von Stripe synchronisiert: Zweite Zeile der Adresse des AbrechnungskontaktscitystringNeinSchreibgeschützt von Stripe synchronisiert: Stadt des AbrechnungskontaktscountrystringNeinSchreibgeschützt von Stripe synchronisiert: Land des AbrechnungskontaktsdefaultPaymentCardNumberLastFourDigitsstringNeindefaultPaymentMethodstringNeindefaultPaymentMethodCardBrandstringNeinemailstringJaE-Mail-Adresse des AbrechnungskontaktsnamestringJaName des AbrechnungskontaktspostalCodestringNeinSchreibgeschützt, synchronisiert von Stripe: Postleitzahl des AbrechnungskontaktsstatestringNeinSchreibgeschützt, synchronisiert von Stripe: Bundesland des AbrechnungskontaktsAntwort
FeldTypBeschreibung
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ü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"
}