Lightspark Sandbox API
Endpoints to trigger test cases in sandbox
Documentation
Documentation
https://docs.lightspark.com/
APIReference
https://docs.lightspark.com/api-reference/authentication
Endpoints to trigger test cases in sandbox
openapi: 3.1.0
info:
title: Grid Agent Management Sandbox API
description: 'API for managing global payments on the open Money Grid. Built by Lightspark. See the full documentation at https://docs.lightspark.com/.
'
version: '2025-10-13'
contact:
name: Lightspark Support
email: support@lightspark.com
license:
name: Proprietary
url: https://lightspark.com/terms
servers:
- url: https://api.lightspark.com/grid/2025-10-13
description: Production server
security:
- BasicAuth: []
- AgentAuth: []
tags:
- name: Sandbox
description: Endpoints to trigger test cases in sandbox
paths:
/sandbox/webhooks/test:
post:
summary: Send a test webhook
description: Send a test webhook to the configured endpoint
operationId: sendTestWebhook
tags:
- Sandbox
security:
- BasicAuth: []
responses:
'200':
description: Webhook delivered successfully
content:
application/json:
schema:
$ref: '#/components/schemas/TestWebhookResponse'
'400':
description: Bad request - Webhook delivery failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error400'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'500':
description: Internal service error
content:
application/json:
schema:
$ref: '#/components/schemas/Error500'
/sandbox/send:
post:
summary: Simulate sending funds
description: 'Simulate sending funds to the bank account as instructed in the quote.
This endpoint is only for the sandbox environment and will fail for production platforms/keys.
'
operationId: sandboxSend
tags:
- Sandbox
security:
- BasicAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxSendRequest'
responses:
'200':
description: Funds received successfully
content:
application/json:
schema:
$ref: '#/components/schemas/OutgoingTransaction'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error400'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden - request was made with a production platform token
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Quote not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'500':
description: Internal service error
content:
application/json:
schema:
$ref: '#/components/schemas/Error500'
/sandbox/uma/receive:
post:
summary: Simulate payment send to test receiving an UMA payment
description: 'Simulate sending payment from an sandbox uma address to a platform customer to test payment receive.
This endpoint is only for the sandbox environment and will fail for production platforms/keys.
'
operationId: sandboxReceive
tags:
- Sandbox
security:
- BasicAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxUmaReceiveRequest'
responses:
'200':
description: Payment triggered successfully
content:
application/json:
schema:
$ref: '#/components/schemas/IncomingTransaction'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error400'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden - request was made with a production platform token
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Sender or receiver not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'500':
description: Internal service error
content:
application/json:
schema:
$ref: '#/components/schemas/Error500'
/sandbox/internal-accounts/{accountId}/fund:
post:
summary: Simulate funding an internal account
description: 'Simulate receiving funds into an internal account in the sandbox environment. This is useful for testing scenarios where you need to add funds to a customer''s or platform''s internal account without going through a real bank transfer or following payment instructions.
This endpoint is only for the sandbox environment and will fail for production platforms/keys.
'
operationId: sandboxFundInternalAccount
tags:
- Sandbox
security:
- BasicAuth: []
parameters:
- name: accountId
in: path
required: true
description: The ID of the internal account to fund
schema:
type: string
example: InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxFundRequest'
examples:
fundUSDAccount:
summary: Fund USD internal account with $1,000
value:
amount: 100000
fundBTCAccount:
summary: Fund BTC internal account with 0.01 BTC
value:
amount: 1000000
responses:
'200':
description: Internal account funded successfully
content:
application/json:
schema:
$ref: '#/components/schemas/InternalAccount'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error400'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden - request was made with a production platform token
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Internal account not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'500':
description: Internal service error
content:
application/json:
schema:
$ref: '#/components/schemas/Error500'
/sandbox/cards/{id}/simulate/authorization:
post:
summary: Simulate a card authorization
description: 'Simulate an inbound card authorization in the sandbox environment. Drives the same internal `authorize` + `reconcile` paths the card issuer would call in production, so platforms can exercise Grid''s decisioning + funding-source pull behavior end-to-end without an external network round-trip.
The decisioning outcome is controlled by the last three characters of `merchant.descriptor`:
| Suffix | Outcome | | ------ | ------- | | `002` | Decline — `INSUFFICIENT_FUNDS` (the pull on the funding source fails) | | `003` | Decline — `CARD_PAUSED` (intended to verify a frozen card refuses auths) | | `005` | Delayed pull (~30s) — exercises the `PENDING → CONFIRMED` path | | `006` | Pull succeeds but the confirmation event reports `FAILED` — exercises the high-urgency `EXCEPTION` alert | | any other | Approved |
Production returns `404` on this path.
'
operationId: sandboxSimulateCardAuthorization
tags:
- Sandbox
security:
- BasicAuth: []
parameters:
- name: id
in: path
required: true
description: The id of the card to simulate an authorization against.
schema:
type: string
example: Card:019542f5-b3e7-1d02-0000-000000000010
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxCardAuthorizationRequest'
examples:
coffeeAuth:
summary: Approved $12.50 auth at a coffee shop
value:
amount: 1250
currency:
code: USD
merchant:
descriptor: BLUE BOTTLE COFFEE SF
mcc: '5814'
country: US
declinedInsufficientFunds:
summary: Declined — insufficient funds (descriptor suffix `002`)
value:
amount: 50000
currency:
code: USD
merchant:
descriptor: AMAZON RETAIL US-002
mcc: '5942'
country: US
responses:
'200':
description: Simulated authorization processed. Returns the resulting card transaction.
content:
application/json:
schema:
$ref: '#/components/schemas/CardTransaction'
'400':
description: Bad request - Invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error400'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden - request was made with a production platform token
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Card not found (also returned in production for this path)
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'500':
description: Internal service error
content:
application/json:
schema:
$ref: '#/components/schemas/Error500'
/sandbox/cards/{id}/simulate/clearing:
post:
summary: Simulate a card clearing
description: 'Simulate a clearing (settlement) event against an existing `CardTransaction` in the sandbox environment.
- A clearing `amount` greater than the authorized amount exercises the over-auth post-hoc-pull path (e.g. restaurant tip on top of a 20% over-auth).
- A clearing `amount` of `0` exercises the `AUTHORIZATION_EXPIRY` path — the auth expires with no clearing posted.
- Suffix-driven outcomes on the parent transaction''s id govern whether the post-hoc pull succeeds (use the suffix table from `simulate/authorization` to construct deterministic test cases).
Production returns `404` on this path.
'
operationId: sandboxSimulateCardClearing
tags:
- Sandbox
security:
- BasicAuth: []
parameters:
- name: id
in: path
required: true
description: The id of the card the clearing applies to.
schema:
type: string
example: Card:019542f5-b3e7-1d02-0000-000000000010
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxCardClearingRequest'
examples:
tipOnTopClearing:
summary: Clearing larger than auth — exercises post-hoc pull
value:
cardTransactionId: CardTransaction:019542f5-b3e7-1d02-0000-000000000100
amount: 1500
authorizationExpiry:
summary: Clearing of 0 — exercises authorization expiry
value:
cardTransactionId: CardTransaction:019542f5-b3e7-1d02-0000-000000000100
amount: 0
responses:
'200':
description: Simulated clearing processed. Returns the updated card transaction.
content:
application/json:
schema:
$ref: '#/components/schemas/CardTransaction'
'400':
description: Bad request - Invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error400'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden - request was made with a production platform token
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Card or card transaction not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'500':
description: Internal service error
content:
application/json:
schema:
$ref: '#/components/schemas/Error500'
/sandbox/cards/{id}/simulate/return:
post:
summary: Simulate a card return
description: 'Simulate a merchant-initiated `RETURN` against an existing settled card transaction in the sandbox environment. Creates a `CardRefund` on the parent and either flips the parent to `REFUNDED` (full refund) or keeps it `SETTLED` with a non-zero `refundedAmount` (partial refund).
Production returns `404` on this path.
'
operationId: sandboxSimulateCardReturn
tags:
- Sandbox
security:
- BasicAuth: []
parameters:
- name: id
in: path
required: true
description: The id of the card the return applies to.
schema:
type: string
example: Card:019542f5-b3e7-1d02-0000-000000000010
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxCardReturnRequest'
examples:
fullRefund:
summary: Full refund of a $15.00 settled transaction
value:
cardTransactionId: CardTransaction:019542f5-b3e7-1d02-0000-000000000100
amount: 1500
responses:
'200':
description: Simulated return processed. Returns the updated card transaction.
content:
application/json:
schema:
$ref: '#/components/schemas/CardTransaction'
'400':
description: Bad request - Invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/Error400'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error401'
'403':
description: Forbidden - request was made with a production platform token
content:
application/json:
schema:
$ref: '#/components/schemas/Error403'
'404':
description: Card or card transaction not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error404'
'500':
description: Internal service error
content:
application/json:
schema:
$ref: '#/components/schemas/Error500'
components:
schemas:
PaymentEmbeddedWalletInfo:
title: Embedded Wallet
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- type: object
required:
- accountType
- payloadToSign
properties:
accountType:
type: string
enum:
- EMBEDDED_WALLET
description: Discriminator value identifying this as Embedded Wallet payment instructions.
payloadToSign:
type: string
description: JSON-encoded transaction signing payload that must be stamped, as-is (byte-for-byte, without re-serialization), with the session private key of a verified authentication credential on the source Embedded Wallet. The resulting Grid wallet signature is passed as the `Grid-Wallet-Signature` header on `POST /quotes/{quoteId}/execute` to authorize the outbound transfer from the wallet.
example: '{"type":"ACTIVITY_TYPE_SIGN_TRANSACTION_V2","timestampMs":"1746736509954","organizationId":"org_abc123","parameters":{"signWith":"wallet_abc123def456","unsignedTransaction":"ea69b4bf05f775209f26ff0a34a05569180f7936579d5c4af9377ae550194f72","type":"TRANSACTION_TYPE_ETHEREUM"},"generateAppProofs":true}'
EurAccountInfoBase:
type: object
required:
- accountType
- iban
properties:
accountType:
type: string
enum:
- EUR_ACCOUNT
iban:
type: string
description: The IBAN of the bank account
example: DE89370400440532013000
minLength: 15
maxLength: 34
pattern: ^[A-Z]{2}[0-9]{2}[A-Za-z0-9]{11,30}$
swiftCode:
type: string
description: The SWIFT/BIC code of the bank
example: DEUTDEFF
minLength: 8
maxLength: 11
pattern: ^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$
example:
accountType: EUR_ACCOUNT
iban: DE89370400440532013000
swiftCode: DEUTDEFF
PaymentBwpAccountInfo:
title: BWP Account
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- $ref: '#/components/schemas/BwpAccountInfo'
- type: object
required:
- reference
properties:
reference:
type: string
description: Unique reference code that must be included with the payment to properly credit it
example: UMA-Q12345-REF
PaymentSlvAccountInfo:
title: SLV Account
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- $ref: '#/components/schemas/SlvAccountInfo'
- type: object
required:
- reference
properties:
reference:
type: string
description: Unique reference code that must be included with the payment to properly credit it
example: UMA-Q12345-REF
PaymentVndAccountInfo:
title: VND Account
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- $ref: '#/components/schemas/VndAccountInfo'
- type: object
required:
- reference
properties:
reference:
type: string
description: Unique reference code that must be included with the payment to properly credit it
example: UMA-Q12345-REF
TzsAccountInfo:
allOf:
- $ref: '#/components/schemas/TzsAccountInfoBase'
- type: object
required:
- paymentRails
properties:
paymentRails:
type: array
items:
type: string
enum:
- MOBILE_MONEY
PaymentBrlAccountInfo:
title: BRL Account
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- type: object
required:
- qrCode
properties:
accountType:
type: string
enum:
- BRL_ACCOUNT
qrCode:
type: string
description: A PIX QR code payload that can be used to fund the transaction. This can be rendered as a QR code image or pasted into a PIX-compatible banking app.
minLength: 1
PaymentJmdAccountInfo:
title: JMD Account
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- $ref: '#/components/schemas/JmdAccountInfo'
- type: object
required:
- reference
properties:
reference:
type: string
description: Unique reference code that must be included with the payment to properly credit it
example: UMA-Q12345-REF
PaymentHkdAccountInfo:
title: HKD Account
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- $ref: '#/components/schemas/HkdAccountInfo'
- type: object
required:
- reference
properties:
reference:
type: string
description: Unique reference code that must be included with the payment to properly credit it
example: UMA-Q12345-REF
SandboxUmaReceiveRequest:
type: object
required:
- senderUmaAddress
- receivingCurrencyCode
- receivingCurrencyAmount
properties:
senderUmaAddress:
type: string
description: UMA address of the sender from the sandbox
example: $success.usd@sandbox.grid.uma.money
receiverUmaAddress:
type: string
description: UMA address of the receiver (optional if customerId is provided)
example: $receiver@uma.domain
customerId:
type: string
description: System ID of the receiver (optional if receiverUmaAddress is provided)
example: Customer:019542f5-b3e7-1d02-0000-000000000001
receivingCurrencyCode:
type: string
description: The currency code for the receiving amount
example: USD
receivingCurrencyAmount:
type: integer
format: int64
description: The amount to be received in the smallest unit of the currency (eg. cents)
exclusiveMinimum: 0
example: 1000
TransactionStatus:
type: string
enum:
- CREATED
- PENDING
- PENDING_AUTHORIZATION
- PROCESSING
- COMPLETED
- REJECTED
- FAILED
- REFUNDED
- EXPIRED
description: 'Status of a payment transaction.
| Status | Description |
|--------|-------------|
| `CREATED` | Initial lookup has been created |
| `PENDING` | Quote has been created |
| `PENDING_AUTHORIZATION` | Awaiting Strong Customer Authentication. Only occurs for customers in a region where SCA is required (e.g. EU); authorize the transaction''s `scaChallenge` to proceed. |
| `PROCESSING` | Funding has been received and payment initiated |
| `COMPLETED` | Cross border payment has been received, converted and payment has been sent to the offramp network |
| `REJECTED` | Receiving institution or wallet rejected payment, payment has been refunded |
| `FAILED` | An error occurred during payment |
| `REFUNDED` | Payment was unable to complete and refunded |
| `EXPIRED` | Quote has expired |
'
InrAccountInfo:
allOf:
- $ref: '#/components/schemas/InrAccountInfoBase'
- type: object
required:
- paymentRails
properties:
paymentRails:
type: array
items:
type: string
enum:
- UPI
- NEFT
- RTGS
Error404:
type: object
required:
- message
- status
- code
properties:
status:
type: integer
enum:
- 404
description: HTTP status code
code:
type: string
description: '| Error Code | Description |
|------------|-------------|
| TRANSACTION_NOT_FOUND | Transaction not found |
| INVITATION_NOT_FOUND | Invitation not found |
| USER_NOT_FOUND | Customer not found |
| QUOTE_NOT_FOUND | Quote not found |
| LOOKUP_REQUEST_NOT_FOUND | Lookup request not found |
| TOKEN_NOT_FOUND | Token not found |
| BULK_UPLOAD_JOB_NOT_FOUND | Bulk upload job not found |
| REFERENCE_NOT_FOUND | Reference not found |
| UMA_NOT_FOUND | The UMA address is well-formed but no receiver exists at the counterparty VASP |
| STABLECOIN_PROVIDER_ACCOUNT_NOT_FOUND | Stablecoin provider account link not found |
'
enum:
- TRANSACTION_NOT_FOUND
- INVITATION_NOT_FOUND
- USER_NOT_FOUND
- QUOTE_NOT_FOUND
- LOOKUP_REQUEST_NOT_FOUND
- TOKEN_NOT_FOUND
- BULK_UPLOAD_JOB_NOT_FOUND
- REFERENCE_NOT_FOUND
- UMA_NOT_FOUND
- STABLECOIN_PROVIDER_ACCOUNT_NOT_FOUND
message:
type: string
description: Error message
details:
type: object
description: Additional error details
additionalProperties: true
BaseTransactionDestination:
type: object
required:
- destinationType
properties:
destinationType:
$ref: '#/components/schemas/TransactionDestinationType'
currency:
type: string
description: Currency code for the destination
example: EUR
GtqAccountInfoBase:
type: object
required:
- accountType
- accountNumber
- bankAccountType
- bankName
properties:
accountType:
type: string
enum:
- GTQ_ACCOUNT
accountNumber:
type: string
description: The account number of the bank
minLength: 1
maxLength: 34
bankAccountType:
type: string
description: The bank account type
enum:
- CHECKING
- SAVINGS
bankName:
type: string
description: The name of the beneficiary's bank
minLength: 1
maxLength: 255
example:
accountType: GTQ_ACCOUNT
accountNumber: '1234567890'
bankAccountType: CHECKING
bankName: Example Bank
CadAccountInfoBase:
type: object
required:
- accountType
- bankCode
- branchCode
- accountNumber
properties:
accountType:
type: string
enum:
- CAD_ACCOUNT
bankCode:
type: string
description: Canadian financial institution number (3 digits)
example: '001'
minLength: 3
maxLength: 3
pattern: ^[0-9]{3}$
branchCode:
type: string
description: Transit number identifying the branch (5 digits)
example: '00012'
minLength: 5
maxLength: 5
pattern: ^[0-9]{5}$
accountNumber:
type: string
description: Bank account number (7-12 digits)
example: '1234567'
minLength: 7
maxLength: 12
pattern: ^[0-9]{7,12}$
EgpAccountInfo:
allOf:
- $ref: '#/components/schemas/EgpAccountInfoBase'
- type: object
required:
- paymentRails
properties:
paymentRails:
type: array
items:
type: string
enum:
- BANK_TRANSFER
- MOBILE_MONEY
PaymentNgnAccountInfo:
title: NGN Account
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- $ref: '#/components/schemas/NgnAccountInfo'
- type: object
required:
- reference
properties:
reference:
type: string
description: Unique reference code that must be included with the payment to properly credit it
example: UMA-Q12345-REF
PaymentHtgAccountInfo:
title: HTG Account
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- $ref: '#/components/schemas/HtgAccountInfo'
- type: object
required:
- reference
properties:
reference:
type: string
description: Unique reference code that must be included with the payment to properly credit it
example: UMA-Q12345-REF
BaseWalletInfo:
type: object
required:
- address
- accountType
properties:
accountType:
type: string
enum:
- BASE_WALLET
address:
type: string
description: Base eth wallet address
example: '0xAbCDEF1234567890aBCdEf1234567890ABcDef12'
SandboxFundRequest:
type: object
required:
- amount
properties:
amount:
type: integer
format: int64
description: Amount to add in the smallest unit of the account's currency (e.g., cents for USD/EUR, satoshis for BTC)
exclusiveMinimum: 0
maximum: 100000000000
example: 100000
PaymentEgpAccountInfo:
title: EGP Account
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- $ref: '#/components/schemas/EgpAccountInfo'
- type: object
required:
- reference
properties:
reference:
type: string
description: Unique reference code that must be included with the payment to properly credit it
example: UMA-Q12345-REF
GbpAccountInfoBase:
type: object
required:
- accountType
- sortCode
- accountNumber
properties:
accountType:
type: string
enum:
- GBP_ACCOUNT
sortCode:
type: string
description: The UK sort code
example: '123456'
minLength: 6
maxLength: 6
pattern: ^[0-9]{6}$
accountNumber:
type: string
description: UK bank account number (8 digits)
minLength: 8
maxLength: 8
example: '12345678'
pattern: ^[0-9]{8}$
example:
accountType: GBP_ACCOUNT
sortCode: '123456'
accountNumber: '12345678'
PaymentRail:
type: string
enum:
- ACH
- ACH_COLOMBIA
- BANK_TRANSFER
- BRE_B
- CIPS
- FAST
- FASTER_PAYMENTS
- FEDNOW
- INSTAPAY
- MOBILE_MONEY
- NEFT
- PAYNOW
- PESONET
- PIX
- RTGS
- RTP
- SEPA
- SEPA_INSTANT
- SPEI
- SWIFT
- UNIONPAY
- UPI
- WIRE
description: The payment rail used for the transfer. Payment rails represent the underlying payment network or system used to move funds between accounts.
example: ACH
PaymentSparkWalletInfo:
title: Spark Wallet
allOf:
- $ref: '#/components/schemas/BasePaymentAccountInfo'
- $ref: '#/components/schemas/SparkWalletInfo'
- type: object
required:
- assetType
properties:
assetType:
type: string
description: Type of asset or configured Spark token currency code
invoice:
type: string
description: Invoice for the payment
example: sparkrt1pgss8ter0fhc4c220f3zftmpz49h8wqte8eg3m5zkrraplgc048jucgszg3ssqgjzqqekv73mmh842yj7drsjwh7t7tz5zt8wf5kghm5v4ehggszppjp5s80cg3qjdzc55g2567tn3lj705hdsr577tg8ah795mlnt6807y657qhkmgfkf9w75p4wz3l8vhua85zdn6ryj32zuj0p00pv2l5z4u47mw6h4s
ThbAccountInfo:
allOf:
- $ref: '#/components/schemas/ThbAccountInfoBase'
- type: object
required:
- paymentRails
properties:
paymentRails:
type: ar
# --- truncated at 32 KB (146 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lightspark/refs/heads/main/openapi/lightspark-sandbox-api-openapi.yml