For app owners
Verify a claim in one request.
Every claim on your listing gets its own token. Put {claim} in your redeem link and the claimer arrives with it; send it back to Osokoro with your API key to confirm the claim is real and mark it redeemed, so the same token cannot be used twice.
Why not just a code
A shared code can be posted anywhere. A claim token belongs to one Osokoro account and one offer, and it can be redeemed once. Use the code for checkout and the token to prove who it came from.
Setting it up
- 1List your app from the Marketplace screen in your dashboard and wait for approval.
- 2Set the offer’s redeem link to a page on your app that contains {claim}, for example https://yourapp.com/redeem?osokoro_claim={claim}.
- 3Create an API key under Settings → API keys. Keep it on your server.
- 4When someone opens the link, call the endpoint below with the token. Apply the offer only when the answer is redeemed.
API keys come with the Everything and Studio plans. On Starter, your listing still works with a code alone; the token is extra proof, not a requirement.
The request
curl -X POST https://osokoro.com/api/v1/marketplace/claims/verify \
-H "Authorization: Bearer $OSOKORO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"token": "<osokoro_claim from the URL>", "redeem": true}'The answers
- redeemed
- The claim is real and has just been marked redeemed. Apply the offer.
- valid
- The claim is real and not yet redeemed (you sent redeem: false).
- already_redeemed
- The claim was redeemed before. Do not apply it again.
- not_found
- No claim on your listings has this token.
{
"status": "redeemed",
"offer_id": "0b8f6a52-…",
"offer": "…",
"kind": "discount",
"listing": "your-app",
"via": "launch",
"claimed_at": "2026-10-13T15:04:05Z",
"redeemed_at": "2026-10-13T15:06:12Z"
}Do you need an SDK?
No. It is one POST with a bearer key, so the function below is the whole integration. Copy it into your server code.
// Server-side only: the API key must never reach a browser.
export async function redeemOsokoroClaim(token: string) {
const res = await fetch("https://osokoro.com/api/v1/marketplace/claims/verify", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.OSOKORO_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ token, redeem: true }),
});
if (res.status === 404) return { ok: false as const, reason: "not_found" };
if (!res.ok) throw new Error(`Osokoro answered ${res.status}`);
const claim = await res.json();
// Apply the offer only on "redeemed": the token has now been used.
return { ok: claim.status === "redeemed", claim };
}Tracking your own campaigns
Add ?via=<tag> to your listing’s share link — lowercase letters, digits, hyphens and underscores. Claims arriving through it are counted per tag on your dashboard and returned as via when you verify.