{
  "@context": {
    "@vocab": "https://saperly.com/schema#",
    "schema": "https://schema.org/",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "dcterms": "http://purl.org/dc/terms/",
    "saperly": "https://saperly.com/schema#",
    "WorkspaceNotFound": "saperly:WorkspaceNotFound",
    "_tag": {
      "@id": "saperly:_tag",
      "@type": "xsd:string"
    },
    "slug": {
      "@id": "saperly:slug",
      "@type": "xsd:string"
    },
    "InternalError": "saperly:InternalError",
    "traceId": {
      "@id": "saperly:traceId",
      "@type": "xsd:string"
    },
    "Unauthorized": "saperly:Unauthorized",
    "message": {
      "@id": "saperly:message",
      "@type": "xsd:string"
    },
    "AuthorizationDenied": "saperly:AuthorizationDenied",
    "reason": {
      "@id": "saperly:reason",
      "@type": "xsd:string"
    },
    "RateLimited": "saperly:RateLimited",
    "bucket": {
      "@id": "saperly:bucket",
      "@type": "xsd:string"
    },
    "AssistantUnavailable": "saperly:AssistantUnavailable",
    "NumberNotFound": "saperly:NumberNotFound",
    "numberId": {
      "@id": "saperly:numberId",
      "@type": "xsd:string"
    },
    "CountryNotAvailable": "saperly:CountryNotAvailable",
    "country": {
      "@id": "saperly:country",
      "@type": "xsd:string"
    },
    "NumberQuotaExceeded": "saperly:NumberQuotaExceeded",
    "limit": {
      "@id": "saperly:limit",
      "@type": "xsd:decimal"
    },
    "current": {
      "@id": "saperly:current",
      "@type": "xsd:decimal"
    },
    "PriceChanged": "saperly:PriceChanged",
    "phoneNumber": {
      "@id": "saperly:phoneNumber",
      "@type": "xsd:string"
    },
    "actualMonthlyPriceCents": {
      "@id": "saperly:actualMonthlyPriceCents",
      "@type": "xsd:decimal"
    },
    "actualUpfrontPriceCents": {
      "@id": "saperly:actualUpfrontPriceCents",
      "@type": "xsd:decimal"
    },
    "expectedMonthlyPriceCents": {
      "@id": "saperly:expectedMonthlyPriceCents",
      "@type": "xsd:decimal"
    },
    "expectedUpfrontPriceCents": {
      "@id": "saperly:expectedUpfrontPriceCents",
      "@type": "xsd:decimal"
    },
    "currency": {
      "@id": "saperly:currency",
      "@type": "xsd:string"
    },
    "IdempotencyConflict": "saperly:IdempotencyConflict",
    "NoNumbersAvailable": "saperly:NoNumbersAvailable",
    "numberType": {
      "@id": "saperly:numberType",
      "@type": "xsd:string"
    },
    "InsufficientFunds": "saperly:InsufficientFunds",
    "balanceCents": {
      "@id": "saperly:balanceCents",
      "@type": "xsd:decimal"
    },
    "requestedCents": {
      "@id": "saperly:requestedCents",
      "@type": "xsd:decimal"
    },
    "PaymentMethodRequired": "saperly:PaymentMethodRequired",
    "activeNumbers": {
      "@id": "saperly:activeNumbers",
      "@type": "xsd:decimal"
    },
    "UpstreamError": "saperly:UpstreamError",
    "status": {
      "@id": "saperly:status",
      "@type": "xsd:decimal"
    },
    "code": {
      "@id": "saperly:code",
      "@type": "xsd:string"
    },
    "IdempotencyKeyMismatch": "saperly:IdempotencyKeyMismatch",
    "InvalidSmsSenderId": "saperly:InvalidSmsSenderId",
    "InvalidCallerIdName": "saperly:InvalidCallerIdName",
    "ConnectionNotFound": "saperly:ConnectionNotFound",
    "id": {
      "@id": "saperly:id",
      "@type": "xsd:string"
    },
    "UnsupportedModel": "saperly:UnsupportedModel",
    "field": {
      "@id": "saperly:field",
      "@type": "xsd:string"
    },
    "model": {
      "@id": "saperly:model",
      "@type": "xsd:string"
    },
    "UnsupportedVoice": "saperly:UnsupportedVoice",
    "voice": {
      "@id": "saperly:voice",
      "@type": "xsd:string"
    },
    "AudioConfigurationError": "saperly:AudioConfigurationError",
    "RecipientOptedOut": "saperly:RecipientOptedOut",
    "to": {
      "@id": "saperly:to",
      "@type": "xsd:string"
    },
    "MessageSendFailed": "saperly:MessageSendFailed",
    "DestinationNotSupported": "saperly:DestinationNotSupported",
    "SpendLimitExceeded": "saperly:SpendLimitExceeded",
    "limitCents": {
      "@id": "saperly:limitCents",
      "@type": "xsd:decimal"
    },
    "priorSpendCents": {
      "@id": "saperly:priorSpendCents",
      "@type": "xsd:decimal"
    },
    "NumberHasNoConnection": "saperly:NumberHasNoConnection",
    "CallStartFailed": "saperly:CallStartFailed",
    "CallNotFound": "saperly:CallNotFound",
    "callId": {
      "@id": "saperly:callId",
      "@type": "xsd:string"
    },
    "CustomVoiceConflict": "saperly:CustomVoiceConflict",
    "CustomVoiceNotFound": "saperly:CustomVoiceNotFound",
    "InvalidVoiceUpload": "saperly:InvalidVoiceUpload"
  },
  "@type": "schema:Dataset",
  "schema:name": "Saperly API JSON-LD context",
  "schema:description": "A JSON-LD @context for the objects Saperly's own API contract declares: one class per component schema, one property per declared field, typed from the contract. Derived by script (derive-json-ld.py, 2026-10-07) from openapi/saperly-openapi.yml.",
  "dcterms:created": "2026-10-07",
  "dcterms:source": [
    "openapi/saperly-openapi.yml"
  ]
}