Verify Apple in one call
POST a transactionId, get a verified payload. SDK-backed JWS verification with pinned roots, OCSP, and sandbox auto-detection.
Drop in. Configure once. Stop thinking about JWS chains, OCSP, and OAuth.
No SDK, no client library. Your backend POSTs a transaction ID, Attesto signs the JWT, calls Apple, verifies the JWS chain, and returns the decoded transaction.
curl -X POST https://api.attesto.nossdev.com/v1/apple/verify \
-H "Authorization: Bearer attesto_live_โฆ" \
-H "Content-Type: application/json" \
-d '{"transactionId":"2000000123456789"}'{
"valid": true,
"environment": "production",
"transaction": {
"transactionId": "2000000123456789",
"bundleId": "com.example.app",
"productId": "premium_monthly",
"expiresDate": "2026-05-10T14:22:10.000Z",
"currency": "USD",
"price": 9990,
"rawDecodedPayload": { "...": "..." }
}
}Google verification has the same shape โ different request fields, identical envelope. See the full API reference โ
Attesto answers one question well โ "is this transaction real and what does it say?" โ and leaves the interpretation to you. If you need entitlements, paywalls, or analytics, look at RevenueCat or iaptic.
transactionId with JWS chain + OCSPpurchaseToken (subscription + product)This boundary is non-negotiable. Read the full positioning โ
Every line that touches your .p8 keys and webhook secrets is reviewable today. No closed-source backend, no proprietary magic.
Clone the repo, configure your encryption key, deploy to Fly / Docker / Kubernetes / your own infra. Full control, zero recurring cost.
Recommended if you have ops capacity and want to control your own data path.
We operate Attesto for you. Apple key rotations, Google service-account management, monitoring, upstream-API change tracking โ all handled. You get an API key and a webhook callback URL.
Recommended for teams who'd rather ship features than operate validation infra.
Questions about integrating Attesto? Need help onboarding? Looking for managed hosting so you don't operate it yourself? The NOSS team reads every email.