Riferimento API

API Fatturazione

Piani, saldo crediti ed estratti conto

Riferimento HTTP. Generato dal contratto backend. Esplora gli endpoint qui sotto o scarica OpenAPI.

Questo gruppo ha 6 operazioni, generate da api/openapi.yaml. Filtra per percorso, azione o autenticazione. Ogni endpoint elenca i suoi input; espandilo per vedere un modello di richiesta e i codici di risposta. I modelli richiedono i tuoi valori e un corpo valido secondo lo schema.

Sostituisci i segnaposto maiuscoli con i tuoi valori. Per una richiesta JSON, salva un corpo che corrisponde allo schema in request.json. Gli esempi di cookie usano un cookie jar locale da una sessione autenticata.

Piani, saldo crediti ed estratti conto

GET/api/billing/balance

Ottieni saldo fatturazione

L’istantanea del saldo consapevole della sorgente del progetto chiamante. Tutti gli importi millicredito sono stringhe decimali canoniche. È un’istantanea, non un’autorità di pagamento; rails_available è falso mentre carta, tasse e rail cash-out non sono disponibili.

Autenticazione
projectBearer O dashboardSession
Corpo della richiesta
nessuno
ID operazione
getBillingBalance

Parametri

NomeInviaObbligatorio?Descrizione
ScreenRig-ProjectintestazioneopzionaleDeprecato per una release. Deve essere coerente con le concessioni JWT dei progetti; aggiunge intestazioni Deprecation e Warning. Nessuno scambio di token.
Modello richiesta e risposte
shell · modello richiesta
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/billing/balance'

Risposte

StatoSignificatoCorpo e intestazioni
200Istante del saldo.Saldo fatturazione (application/json)
predefinito

Risposta problema stabile RFC 9457. Un 421 server_draining ha Retry-After di 1 secondo, un 500 not_ready o dependency_unavailable ha 5, e un 500 manifest_degraded ha 60, salvo valore più specifico impostato dal gestore.

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

Ottieni estratto conto

Paginazione cursore stabile su voci di diario immutabili pubblicate per il progetto chiamante. Le hold non sono voci pubblicate. Le correzioni collegano all'evento originale invece di riscriverlo. Non ci sono mutazioni arbitrarie di concessione o pagamento su questa superficie.

Autenticazione
projectBearer O dashboardSession
Corpo della richiesta
nessuno
ID operazione
getBillingStatement

Parametri

NomeInviaObbligatorio?Descrizione
ScreenRig-ProjectintestazioneopzionaleDeprecato per una release. Deve essere coerente con le concessioni JWT dei progetti; aggiunge intestazioni Deprecation e Warning. Nessuno scambio di token.
cursorequeryopzionale
limitequeryopzionale
Modello richiesta e risposte
shell · modello richiesta
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/billing/statement'

Risposte

StatoSignificatoCorpo e intestazioni
200Pagina estratto conto.Estratto conto fatturazione (application/json)
400invalid_request - limite fuori intervallo.Problema (application/problem+json)
predefinito

Risposta problema stabile RFC 9457. Un 421 server_draining ha Retry-After di 1 secondo, un 500 not_ready o dependency_unavailable ha 5, e un 500 manifest_degraded ha 60, salvo valore più specifico impostato dal gestore.

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

Ottieni utilizzo fatturazione

L’uso del progetto chiamante per un mese UTC, con i byte serviti e ricevuti (mai addebitati), l’archiviazione addebitata oltre quella gratuita del piano del pagante (allowance.storage_bytes) e le richieste API, gli eventi di flusso del progetto fatturati e i tentativi di consegna webhook conteggiati rispetto ai 10.000 gratuiti al mese. Un progetto che paga per sé legge il proprio pool.

Un progetto pagato da un altro pagatore condivide il pool di quel pagatore con gli altri progetti di quel pagatore; legge la propria quota, e payer nomina il pagatore. Il totale del pool del pagatore resta nelle letture di fatturazione del pagatore.

Autenticazione
projectBearer O dashboardSession
Corpo della richiesta
nessuno
ID operazione
getBillingUsage

Parametri

NomeInviaObbligatorio?Descrizione
ScreenRig-ProjectintestazioneopzionaleDeprecato per una release. Deve essere coerente con le concessioni JWT dei progetti; aggiunge intestazioni Deprecation e Warning. Nessuno scambio di token.
periodoqueryopzionaleMese UTC in formato YYYY-MM; predefinito al mese corrente.
Modello richiesta e risposte
shell · modello richiesta
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/billing/usage'

Risposte

StatoSignificatoCorpo e intestazioni
200Utilizzo del progetto.ProjectBillingUsage (application/json); intestazioni: Cache-Control
400invalid_request - il periodo non è un mese UTC nel formato YYYY-MM.Problema (application/problem+json)
predefinito

Risposta problema stabile RFC 9457. Un 421 server_draining ha Retry-After di 1 secondo, un 500 not_ready o dependency_unavailable ha 5, e un 500 manifest_degraded ha 60, salvo valore più specifico impostato dal gestore.

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

Ottieni offerta App Store

Che cosa un’organizzazione può acquistare tramite App Store nell’app screenRIG per iPhone e iPad (bundle ai.screenrig.app) e il token account che portano i suoi acquisti.

Richiede un amministratore designato dell’organizzazione attiva (la persona che ne gestisce piano e fatturazione); lo staff e gli amministratori del reseller a cui l’organizzazione è delegata possono leggere l’offerta senza products o token, e chiunque altro riceve 404 not_found.

Un’organizzazione delegata a un reseller non elenca alcun prodotto: il suo reseller paga il piano. account_token è un UUID casuale che il server crea una volta per organizzazione e conserva: l’app lo passa a StoreKit come appAccountToken, così ogni transazione e ogni notifica del server nomina la sua organizzazione.

Per un lettore che non può acquistare, account_token è l’UUID composto solo da zeri. products elenca i piani che il chiamante può acquistare ora, un prodotto App Store ciascuno: plus, education (solo finché education_eligible è true) e premium. education_eligible è true quando lo staff ha verificato una scuola o un distretto K-12, oppure quando l’amministratore che legge l’offerta ha un indirizzo email dell’account verificato su un dominio scolastico K-12 (education_eligibility_source school_email): aprire l’offerta, o registrare una transazione, come tale amministratore rende l’organizzazione idonea una sola volta, scrive una voce di audit dell’organizzazione con il dominio corrispondente e include Education nella stessa offerta.

Una decisione dello staff, in un senso o nell’altro, è definitiva e l’idoneità automatica non la sostituisce mai.

Un piano che l’organizzazione ha già tramite un’altra fonte (staff, fatturazione, un altro abbonamento) allo stesso livello o a uno superiore non viene offerto, tranne alla persona il cui abbonamento App Store lo detiene, che può cambiare piano all’interno del gruppo di abbonamenti. can_purchase è true quando products non è vuoto. subscription è l’abbonamento App Store dell’organizzazione, oppure null.

La risposta è privata e no-store.

Autenticazione
dashboardSession
Corpo della richiesta
nessuno
ID operazione
getAppStoreOffer

Parametri

NomeInviaObbligatorio?Descrizione
organization_idpathobbligatorio
Modello richiesta e risposte
shell · modello richiesta
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/organizations/ORGANIZATION_ID/app-store/offer'

Risposte

StatoSignificatoCorpo e intestazioni
200L’offerta di piani App Store dell’organizzazione.AppStoreOffer (application/json); intestazioni: Cache-Control
predefinito

Risposta problema stabile RFC 9457. Un 421 server_draining ha Retry-After di 1 secondo, un 500 not_ready o dependency_unavailable ha 5, e un 500 manifest_degraded ha 60, salvo valore più specifico impostato dal gestore.

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

Registra transazione App Store

Registra una transazione firmata StoreKit 2 (Transaction.jwsRepresentation) acquistata per l’organizzazione e mette l’organizzazione sul suo piano. Richiede un amministratore designato dell’organizzazione attiva, l’autenticazione tramite cookie della stessa origine e, per le sessioni JWT, l’intestazione CSRF.

Il server verifica il JWS con la sua catena x5c fino ad Apple Root CA - G3 (fuori dalla produzione anche la radice di test StoreKit di Xcode), il bundle id ai.screenrig.app, l’id prodotto, l’ambiente (Production solo in produzione; Sandbox ovunque, perché App Review e TestFlight acquistano con account sandbox contro la produzione; Xcode solo fuori dalla produzione) e che appAccountToken sia uguale all’account_token dell’organizzazione (getAppStoreOffer); nulla nella richiesta nomina chi ha pagato.

Il piano segue il prodotto della transazione più recente dell’abbonamento: un piano superiore si applica subito e uno inferiore quando lo raggiunge il prossimo inizio mese UTC della fatturazione, come per qualsiasi cambio di piano. Inviare di nuovo una transazione, o una più vecchia, non cambia nulla e risponde con l’abbonamento così com’è; una transazione scaduta viene registrata e non cambia alcun piano.

L’app conclude la transazione dopo un 2xx o un problema 4xx definitivo. Problemi: app_store_transaction_invalid (422), app_store_account_mismatch (409), education_not_eligible (403), app_store_plan_conflict (409), billed_by_reseller (409, l’organizzazione è delegata a un reseller, che paga il suo piano).

Autenticazione
dashboardSession
Corpo della richiesta
AppStoreTransactionRequest
ID operazione
recordAppStoreTransaction

Parametri

NomeInviaObbligatorio?Descrizione
organization_idpathobbligatorio

Campi del corpo della richiesta

CampoDescrizione
signed_transaction (obbligatorio, stringa)La jwsRepresentation StoreKit 2 della transazione, esattamente come l’ha restituita StoreKit. minLength: 1 maxLength: 65536
Modello richiesta e risposte
shell · modello richiesta
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'

Risposte

StatoSignificatoCorpo e intestazioni
200L’abbonamento App Store dopo la transazione.AppStoreSubscription (application/json); intestazioni: Cache-Control
predefinito

Risposta problema stabile RFC 9457. Un 421 server_draining ha Retry-After di 1 secondo, un 500 not_ready o dependency_unavailable ha 5, e un 500 manifest_degraded ha 60, salvo valore più specifico impostato dal gestore.

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

Ricevi notifica App Store

App Store Server Notifications V2 di Apple (il corpo signedPayload), l’URL impostato in App Store Connect per gli ambienti di produzione e sandbox. Pubblico: il payload firmato è la credenziale, verificato come recordAppStoreTransaction verifica una transazione, insieme alla transazione firmata e alle informazioni di rinnovo al suo interno.

SUBSCRIBED, DID_RENEW, DID_CHANGE_RENEWAL_PREF e DID_CHANGE_RENEWAL_STATUS (e OFFER_REDEEMED, RENEWAL_EXTENDED e REFUND_REVERSED) applicano la transazione più recente: un rinnovo estende l’abbonamento, un upgrade cambia subito il piano e un downgrade quando il prodotto inferiore viene rinnovato a fine periodo.

EXPIRED, GRACE_PERIOD_EXPIRED, REFUND e REVOKE terminano l’abbonamento e rimuovono il piano che aveva impostato, come la fatturazione rimuove qualsiasi piano: al prossimo inizio mese UTC, senza riprendere nulla di già concesso. Un piano che staff o fatturazione hanno assegnato da allora all’organizzazione non viene mai rimosso.

Qualsiasi altro tipo, una notifica per un prodotto che non è un piano e una che non nomina alcuna organizzazione vengono confermate e registrate. 200 conferma. Un payload che non si verifica è un problema 422 app_store_transaction_invalid; un errore lato server è un 5xx, che Apple rinvia. Limitato per indirizzo client.

Autenticazione
nessuno
Corpo della richiesta
AppStoreNotificationRequest
ID operazione
receiveAppStoreNotification

Campi del corpo della richiesta

CampoDescrizione
signedPayload (obbligatorio, stringa)Notifica firmata di Apple (un JWS). minLength: 1
Modello richiesta e risposte
shell · modello richiesta
curl --request POST --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/app-store/notifications'

Risposte

StatoSignificatoCorpo e intestazioni
200La notifica è stata confermata.AppStoreNotificationAcknowledgement (application/json); intestazioni: Cache-Control
422app_store_transaction_invalid — il payload non è una notifica App Store valida per questo server.Problema (application/problem+json)
429

Problema rate_limited stabile. Ritenta solo dopo l'intervallo Retry-After autorevole. I dinieghi a finestra fissa includono anche RateLimit-Policy e membri RateLimit applicabili; i dinieghi per concorrenza e budget byte omettono tali divulgazioni opzionali.

Problema (application/problem+json); intestazioni: Retry-After, RateLimit-Policy, RateLimit
predefinito

Risposta problema stabile RFC 9457. Un 421 server_draining ha Retry-After di 1 secondo, un 500 not_ready o dependency_unavailable ha 5, e un 500 manifest_degraded ha 60, salvo valore più specifico impostato dal gestore.

Problema (application/problem+json)