VoidhashDocs
DevelopersHelp centerGuidesAPI reference
Dashboard
Essentials
API overview
Authentication
Event capture
Push device API
Webhooks
Webhook delivery
Webhook events
Projects & keys
Projects
API keys
Audit log
Customers & access
Persons
Products
Perks
Sandbox
Paywalls
Paywalls
Paywall locations
Components
Component registry
Assets
Experiments & flags
Experiments
Feature flags
Analytics & events
Analytics
Analytics alerts
Cohorts
Group types
Groups
Events
Ingest policy
VoidQL
Tracking domains
Ads
Ads
Ad accounts
Meta measurement
Payments & stores
Payment providers
Payment provider products
Purchase history imports
Payment sources
Webhooks & notifications
Webhooks
Push notifications
Push configurations
Automations
Organization & team
Organizations
Members
Invitations
Billing
Your account
Profile
Session
Notices
Connected apps
Terms of Service
Developer tools
Schema
SDK
Retrieve the person
Identify a person
Update the person's attributes
Sync a store transaction
Sign a promotional offer
Record a development purchase
Evaluate feature flags
Resolve a paywall
Retrieve the SDK schema
Register a push device
Refresh a push device
Unregister a push device

Retrieve the SDK schema

Reads the project's products, perks and paywall locations, keyed by slug, in the shape the SDKs use, with the schema's version.

schema.get serves the same schema to the management API.

Guide: Install an SDK

GET
/api/v1/sdk/schema

Authorization

x-publishable-key<token>

A project publishable key, which ships inside apps. Send the end user's distinct id in x-distinct-id with it.

In: header

Header parameters

x-distinct-id*string

The distinct id of the end user the request acts for: the anonymous vh_anon_… id the SDK generated, or the id the app identified them with. At most 255 characters.

x-distinct-id-encoding?"percent"

percent when x-distinct-id holds the RFC 3986 percent-encoded UTF-8 form of an id that is not printable ASCII; leave it out when the header holds the id as is.

Value in

  • "percent"
x-publishable-key*string

The project's publishable key, vh_pk_…. A test key, vh_pk_test_…, works with store sandbox and test purchases.

x-client-bundle-id*string

The app's bundle id on iOS or package name on Android, which picks the project's store configuration for purchases and promotional offers.

x-client-locale?string

The end user's most preferred locale, such as en-US.

x-client-version?string

The app's version, such as 2.4.1.

x-is-backgrounded*string

true when the app sent the request from the background, otherwise false.

Value in

  • "true"
  • "false"
x-is-debug-build*string

true when the app is a debug build, otherwise false. Only debug builds can make simulated development purchases.

Value in

  • "true"
  • "false"
x-nonce?string

A random id, new for every request, such as a lowercase UUID.

x-observer-mode*string

true when the SDK runs in observer mode: another billing integration owns purchases and the SDK only reports them. Otherwise false.

Value in

  • "true"
  • "false"
x-platform*string

The platform the app runs on, such as ios, android or web. Records where a new person signed up.

x-platform-brand?string

The device's manufacturer, such as Apple or Google.

x-platform-device?string

The device's model, such as iPhone15,2; in a browser, its navigator.platform.

x-platform-flavor*string

native in an app, browser in a web page.

Value in

  • "native"
  • "browser"
x-platform-flavor-version?string

The version of the app hosting the SDK; native SDKs send the app's version, the web SDK leaves it out.

x-platform-version?string

The operating system's version, such as 17.4; in a browser, its user agent.

x-preferred-locales?string

The end user's preferred locales, most preferred first, separated by commas, such as en-US,de-DE.

x-sdk*string

The SDK making the request: ios, android, react-native or web. A native SDK driven by another reports the outer one, such as react-native.

Value in

  • "react-native"
  • "web"
  • "ios"
  • "android"
x-sdk-version*string

The version of the SDK making the request, such as 1.4.0.

x-storefront?string

The app store storefront (country) the end user buys from, when the SDK knows it.

Examples

curl -X GET "https://api.voidhash.com/api/v1/sdk/schema" \  -H "x-distinct-id: user_8231" \  -H "x-publishable-key: vh_pk_..." \  -H "x-client-bundle-id: com.example.app" \  -H "x-is-backgrounded: true" \  -H "x-is-debug-build: true" \  -H "x-observer-mode: true" \  -H "x-platform: ios" \  -H "x-platform-flavor: native" \  -H "x-sdk: react-native" \  -H "x-sdk-version: 0.0.1-alpha.1"
{  "locations": {    "onboarding-end": {      "description": "After the last onboarding screen.",      "name": "Onboarding upsell",      "slug": "onboarding-end"    },    "settings-upgrade": {      "description": null,      "name": "Settings upgrade",      "slug": "settings-upgrade"    }  },  "perks": {    "premium": {      "name": "Premium",      "slug": "premium"    }  },  "products": {    "pro_annual": {      "configuration": {        "perks": {          "premium": true        },        "providers": {          "appleAppStore": {            "productId": "com.example.pro_annual",            "offers": []          },          "development": {            "currencyCode": "USD",            "duration": "annual",            "period": "year",            "periodCount": 1,            "price": 49.99,            "priceInMinorUnits": 4999,            "productId": "pro_annual",            "warning": null          }        }      },      "properties": {        "name": "Pro annual"      },      "id": "prod_q4w8e2r6t1y5u9i3o7p0a2s6",      "duration": "annual",      "slug": "pro_annual",      "type": "subscription"    },    "pro_monthly": {      "configuration": {        "perks": {          "premium": true        },        "providers": {          "appleAppStore": {            "productId": "com.example.pro_monthly",            "offers": [              {                "id": "winback-50",                "offerId": "com.example.winback_50"              }            ]          },          "development": {            "currencyCode": "USD",            "duration": "monthly",            "period": "month",            "periodCount": 1,            "price": 9.99,            "priceInMinorUnits": 999,            "productId": "pro_monthly",            "warning": null          }        }      },      "properties": {        "name": "Pro monthly"      },      "id": "prod_x8k2m5q9v3n7c1z4w6e0r2t5",      "duration": "monthly",      "slug": "pro_monthly",      "type": "subscription"    }  },  "version": "sha256:3b7e1f9a0c4d8e2b6f5a1c9d7e3b0a4f8c2e6d1b5a9f3c7e0d4b8a2f6c1e5d9b"}
{  "_tag": "Api/SdkValidationError",  "message": "string"}
{  "_tag": "Api/AuthenticationError",  "cause": "string",  "message": "string"}
{  "_tag": "Api/SchemaServiceError",  "cause": "string"}

Response body

application/json

application/json

application/json

application/json

Errors

This operation adds no error codes of its own. It can fail with the errors every operation shares, such as unauthenticated; see Errors.

More in SDK

  • Retrieve the person GET
  • Identify a person POST
  • Update the person's attributes POST
  • Sync a store transaction POST
  • Sign a promotional offer POST
  • Record a development purchase POST
  • Evaluate feature flags POST
  • Resolve a paywall POST
  • Register a push device POST
  • Refresh a push device POST
  • Unregister a push device POST

Something wrong or missing on this page? Tell us by email or on Discord.

PreviousResolve a paywallNextRegister a push device

On this page

AuthorizationHeader parametersExamplesResponse bodyErrorsMore in SDK