API-Referenz

Abrechnung-API

Pläne, Guthaben und Kontoauszüge

HTTP-Referenz. Generiert aus dem Backend-Vertrag. Durchsuchen Sie die Endpunkte unten oder laden Sie OpenAPI herunter.

Diese Gruppe hat 6 Operationen, generiert aus api/openapi.yaml. Filtern Sie nach Pfad, Aktion oder Authentifizierung. Jeder Endpunkt listet seine Eingaben auf; klappen Sie ihn auf, um eine Anfragevorlage und die Antwortcodes zu sehen. Die Vorlagen brauchen Ihre eigenen Werte und einen schemagültigen Anfragekörper.

Großgeschriebene Platzhalter durch Ihre Werte ersetzen. Für eine JSON-Anfrage speichern Sie einen Body, der dem Schema in request.json entspricht. Cookie-Beispiele verwenden ein lokales Cookie-Archiv aus einer authentifizierten Sitzung.

Pläne, Guthaben und Kontoauszüge

GET/api/billing/balance

Abrechnungsstand abrufen

Die quellenbewusste Kontostandsaufnahme des aufrufenden Projekts. Alle Millicredit-Beträge sind kanonische Dezimalstrings. Es ist eine Momentaufnahme, keine Zahlungsbefugnis; rails_available ist falsch, solange Karte, Steuer und Auszahlungs-Schiene nicht verfügbar sind.

Authentifizierung
projectBearer ODER dashboardSession
Anfrageinhalt
keine
Operations-ID
getBillingBalance

Parameter

NameSendenErforderlich?Beschreibung
ScreenRig-ProjectÜberschriftoptionalFür eine Veröffentlichung veraltet. Muss mit den JWT-Projektberechtigungen übereinstimmen; fügt Deprecation- und Warning-Header hinzu. Kein Token-Austausch.
Anfragevorlage und Antworten
Shell · Anfragevorlage
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/billing/balance'

Antworten

StatusBedeutungTextkörper und Header
200Bilanz-Snapshot.Abrechnungsbilanz (application/json)
Standard

Stabile RFC 9457-Fehlerantwort. Ein 421 server_draining enthält Retry-After von 1 Sekunde, ein 500 not_ready oder dependency_unavailable enthält 5, und ein 500 manifest_degraded enthält 60, sofern der Handler keinen spezifischeren Wert gesetzt hat.

Problem (application/problem+json)
GET/api/billing/statement

Abrechnungsbeleg abrufen

Stabile Cursor-Paginierung über unveränderliche veröffentlichte Journal-Einträge für das aufrufende Projekt. Holds sind keine veröffentlichten Einträge. Korrekturen verlinken auf das Originalereignis, anstatt es umzuschreiben. Es gibt keine willkürliche Gewährungs- oder Auszahlungsänderung auf dieser Ebene.

Authentifizierung
projectBearer ODER dashboardSession
Anfrageinhalt
keine
Operations-ID
getBillingStatement

Parameter

NameSendenErforderlich?Beschreibung
ScreenRig-ProjectÜberschriftoptionalFür eine Veröffentlichung veraltet. Muss mit den JWT-Projektberechtigungen übereinstimmen; fügt Deprecation- und Warning-Header hinzu. Kein Token-Austausch.
CursorAbfrageoptional
LimitAbfrageoptional
Anfragevorlage und Antworten
Shell · Anfragevorlage
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/billing/statement'

Antworten

StatusBedeutungTextkörper und Header
200Seite mit Kontoauszug.Abrechnungs-Auszug (application/json)
400invalid_request - Limit liegt außerhalb des zulässigen Bereichs.Problem (application/problem+json)
Standard

Stabile RFC 9457-Fehlerantwort. Ein 421 server_draining enthält Retry-After von 1 Sekunde, ein 500 not_ready oder dependency_unavailable enthält 5, und ein 500 manifest_degraded enthält 60, sofern der Handler keinen spezifischeren Wert gesetzt hat.

Problem (application/problem+json)
GET/api/billing/usage

Abrechnungsnutzung abrufen

Die Nutzung des aufrufenden Projekts für einen UTC-Monat, mit den ausgelieferten und empfangenen Bytes (nie berechnet), dem Speicher, der über dem kostenlosen Speicher des Plans des Zahlers berechnet wird (allowance.storage_bytes), sowie den API-Anfragen, abgerechneten Projekt-Stream-Ereignissen und Webhook-Zustellversuchen, die auf die kostenlosen 10.000 pro Monat angerechnet werden. Ein Projekt, das für sich selbst zahlt, liest seinen eigenen Pool.

Ein Projekt, für das ein anderer Zahler bezahlt, teilt den Pool dieses Zahlers mit dessen anderen Projekten; es liest seinen eigenen Anteil, und payer nennt den Zahler. Der Pool-Gesamtbetrag des Zahlers bleibt in den Abrechnungen des Zahlers.

Authentifizierung
projectBearer ODER dashboardSession
Anfrageinhalt
keine
Operations-ID
getBillingUsage

Parameter

NameSendenErforderlich?Beschreibung
ScreenRig-ProjectÜberschriftoptionalFür eine Veröffentlichung veraltet. Muss mit den JWT-Projektberechtigungen übereinstimmen; fügt Deprecation- und Warning-Header hinzu. Kein Token-Austausch.
ZeitraumAbfrageoptionalUTC-Monat in YYYY-MM-Form; Standard ist der aktuelle Monat.
Anfragevorlage und Antworten
Shell · Anfragevorlage
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/billing/usage'

Antworten

StatusBedeutungTextkörper und Header
200Projektnutzung.ProjectBillingUsage (application/json); Header: Cache-Control
400invalid_request - Periode ist kein UTC-Monat in YYYY-MM-Form.Problem (application/problem+json)
Standard

Stabile RFC 9457-Fehlerantwort. Ein 421 server_draining enthält Retry-After von 1 Sekunde, ein 500 not_ready oder dependency_unavailable enthält 5, und ein 500 manifest_degraded enthält 60, sofern der Handler keinen spezifischeren Wert gesetzt hat.

Problem (application/problem+json)
GET/api/organizations/{organization_id}/app-store/offer

App-Store-Angebot abrufen

Was eine Organisation über den App Store in der screenRIG-App für iPhone und iPad kaufen darf (Bundle ai.screenrig.app) und das Konto-Token, das ihre Käufe tragen.

Erfordert einen designierten Administrator der aktiven Organisation (die Person, die ihren Plan und ihre Abrechnung verwaltet); Mitarbeiter und die Admins des Resellers, an den die Organisation delegiert ist, können das Angebot ohne products oder Token lesen, alle anderen erhalten 404 not_found.

Eine an einen Reseller delegierte Organisation listet keine Produkte auf: ihr Reseller bezahlt ihren Plan. account_token ist eine zufällige UUID, die der Server einmal pro Organisation erzeugt und aufbewahrt: Die App übergibt sie an StoreKit als appAccountToken, sodass jede Transaktion und jede Server-Benachrichtigung ihre Organisation nennt.

Für einen Leser, der nicht kaufen kann, ist account_token die UUID aus lauter Nullen. products listet die Pläne, die der Aufrufer jetzt kaufen darf, je ein App-Store-Produkt: plus, education (nur solange education_eligible true ist) und premium. education_eligible ist true, wenn Mitarbeiter eine K-12-Schule oder einen K-12-Schulbezirk verifiziert haben oder wenn der Admin, der das Angebot liest, eine verifizierte Konto-E-Mail-Adresse bei einer K-12-Schuldomain hat (education_eligibility_source school_email): Öffnet ein solcher Admin das Angebot oder erfasst er eine Transaktion, wird die Organisation einmalig berechtigt, ein Organisations-Audit-Eintrag mit der passenden Domain geschrieben und Education in dasselbe Angebot aufgenommen.

Eine Entscheidung der Mitarbeiter, in beide Richtungen, ist endgültig, und die automatische Berechtigung überschreibt sie nie.

Ein Plan, den die Organisation bereits über eine andere Quelle (Mitarbeiter, Rechnungsstellung, anderes Abonnement) auf gleicher oder höherer Stufe hat, wird nicht angeboten, außer der Person, deren App-Store-Abonnement ihn hält; sie darf innerhalb der Abonnementgruppe den Plan wechseln. can_purchase ist true, wenn products nicht leer ist. subscription ist das App-Store-Abonnement der Organisation oder null.

Die Antwort ist privat und no-store.

Authentifizierung
dashboardSession
Anfrageinhalt
keine
Operations-ID
getAppStoreOffer

Parameter

NameSendenErforderlich?Beschreibung
organization_idPfaderforderlich
Anfragevorlage und Antworten
Shell · Anfragevorlage
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/organizations/ORGANIZATION_ID/app-store/offer'

Antworten

StatusBedeutungTextkörper und Header
200Das App-Store-Planangebot der Organisation.AppStoreOffer (application/json); Header: Cache-Control
Standard

Stabile RFC 9457-Fehlerantwort. Ein 421 server_draining enthält Retry-After von 1 Sekunde, ein 500 not_ready oder dependency_unavailable enthält 5, und ein 500 manifest_degraded enthält 60, sofern der Handler keinen spezifischeren Wert gesetzt hat.

Problem (application/problem+json)
POST/api/organizations/{organization_id}/app-store/transactions

App-Store-Transaktion erfassen

Erfasst eine signierte StoreKit-2-Transaktion (Transaction.jwsRepresentation), die für die Organisation gekauft wurde, und versetzt die Organisation in ihren Plan. Erfordert einen designierten Administrator der aktiven Organisation, Cookie-Authentifizierung mit demselben Ursprung und bei JWT-Sitzungen den CSRF-Header.

Der Server verifiziert das JWS mit seiner x5c-Kette bis Apple Root CA - G3 (außerhalb der Produktion auch dem StoreKit-Testing-Root von Xcode), die Bundle-ID ai.screenrig.app, die Produkt-ID, die Umgebung (Production nur in der Produktion; Sandbox überall, weil App Review und TestFlight mit Sandbox-Konten gegen die Produktion kaufen; Xcode nur außerhalb der Produktion) und dass appAccountToken dem account_token der Organisation entspricht (getAppStoreOffer); nichts in der Anfrage nennt, wer bezahlt hat.

Der Plan folgt dem Produkt der neuesten Transaktion des Abonnements: Ein höherer Plan gilt sofort, ein niedrigerer, wenn ihn der nächste UTC-Monatswechsel der Abrechnung erreicht, wie bei jedem Planwechsel. Eine erneut gesendete oder ältere Transaktion ändert nichts und beantwortet das Abonnement, wie es steht; eine abgelaufene Transaktion wird erfasst und ändert keinen Plan.

Die App schließt die Transaktion nach einer 2xx-Antwort oder einem endgültigen 4xx-Problem ab. Probleme: app_store_transaction_invalid (422), app_store_account_mismatch (409), education_not_eligible (403), app_store_plan_conflict (409), billed_by_reseller (409, die Organisation ist an einen Reseller delegiert, der für ihren Plan zahlt).

Authentifizierung
dashboardSession
Anfrageinhalt
AppStoreTransactionRequest
Operations-ID
recordAppStoreTransaction

Parameter

NameSendenErforderlich?Beschreibung
organization_idPfaderforderlich

Anfrageinhalt-Felder

FeldBeschreibung
signed_transaction (erforderlich, Zeichenfolge)Die StoreKit-2-jwsRepresentation der Transaktion, genau so, wie StoreKit sie geliefert hat. minLength: 1 maxLength: 65536
Anfragevorlage und Antworten
Shell · Anfragevorlage
curl --request POST --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/organizations/ORGANIZATION_ID/app-store/transactions'

Antworten

StatusBedeutungTextkörper und Header
200Das App-Store-Abonnement nach der Transaktion.AppStoreSubscription (application/json); Header: Cache-Control
Standard

Stabile RFC 9457-Fehlerantwort. Ein 421 server_draining enthält Retry-After von 1 Sekunde, ein 500 not_ready oder dependency_unavailable enthält 5, und ein 500 manifest_degraded enthält 60, sofern der Handler keinen spezifischeren Wert gesetzt hat.

Problem (application/problem+json)
POST/api/app-store/notifications

App-Store-Benachrichtigung empfangen

Apples App Store Server Notifications V2 (der Body signedPayload), die in App Store Connect für die Produktions- und die Sandbox-Umgebung festgelegte URL. Öffentlich: Die signierte Payload ist der Berechtigungsnachweis und wird so verifiziert, wie recordAppStoreTransaction eine Transaktion verifiziert, samt der darin enthaltenen signierten Transaktion und Verlängerungsinformation.

SUBSCRIBED, DID_RENEW, DID_CHANGE_RENEWAL_PREF und DID_CHANGE_RENEWAL_STATUS (sowie OFFER_REDEEMED, RENEWAL_EXTENDED und REFUND_REVERSED) wenden die neueste Transaktion an: Eine Verlängerung verlängert das Abonnement, ein Upgrade wechselt den Plan sofort und ein Downgrade, wenn das niedrigere Produkt zum Periodenende verlängert wird.

EXPIRED, GRACE_PERIOD_EXPIRED, REFUND und REVOKE beenden das Abonnement und entfernen den damit gesetzten Plan, wie die Abrechnung jeden Plan entfernt: zum nächsten UTC-Monatswechsel, ohne bereits Gewährtes zurückzunehmen. Ein Plan, den Mitarbeiter oder die Rechnungsstellung der Organisation seither gegeben haben, wird nie entfernt.

Jeder andere Typ, eine Benachrichtigung für ein Produkt, das kein Plan ist, und eine, die keine Organisation nennt, werden bestätigt und protokolliert. 200 bestätigt. Eine Payload, die sich nicht verifizieren lässt, ist ein 422-Problem app_store_transaction_invalid; ein serverseitiger Fehler ist ein 5xx, den Apple erneut sendet. Begrenzt pro Client-Adresse.

Authentifizierung
keine
Anfrageinhalt
AppStoreNotificationRequest
Operations-ID
receiveAppStoreNotification

Anfrageinhalt-Felder

FeldBeschreibung
signedPayload (erforderlich, Zeichenfolge)Apples signierte Benachrichtigung (ein JWS). minLength: 1
Anfragevorlage und Antworten
Shell · Anfragevorlage
curl --request POST --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/app-store/notifications'

Antworten

StatusBedeutungTextkörper und Header
200Die Benachrichtigung wurde bestätigt.AppStoreNotificationAcknowledgement (application/json); Header: Cache-Control
422app_store_transaction_invalid — die Payload ist keine gültige App-Store-Benachrichtigung für diesen Server.Problem (application/problem+json)
429

Stabiles rate_limited-Problem. Nur nach dem autoritativen Retry-After-Intervall erneut versuchen. Ablehnungen mit festem Fenster enthalten auch die anwendbare RateLimit-Policy und RateLimit-Mitglieder; Ablehnungen wegen gleichzeitiger Nutzung und Byte-Budget enthalten diese optionalen Angaben nicht.

Problem (application/problem+json); Header: Retry-After, RateLimit-Policy, RateLimit
Standard

Stabile RFC 9457-Fehlerantwort. Ein 421 server_draining enthält Retry-After von 1 Sekunde, ein 500 not_ready oder dependency_unavailable enthält 5, und ein 500 manifest_degraded enthält 60, sofern der Handler keinen spezifischeren Wert gesetzt hat.

Problem (application/problem+json)