INTAYO™
ArenaSign in

Developers

The INTAYO API connects your account to automation tools such as n8n and Zapier, to your own bots, and to AI assistants via MCP.

Access

Every call carries a token in the Authorization header. You create your own token in the settings — this requires a Club plan. Companies receive group-wide tokens through support.

Authorization: Bearer ity_…

A token is bound either to one account or to one group. A group token names the acting member via user_email on every call and rejects non-members.

Scopes

  • profile:readRead profile and record
  • challenges:readRead challenges
  • challenges:writeCreate and answer challenges
  • events:readRead the event feed
  • group:readRead group and members
  • group:manageManage members
  • webhooks:manageManage webhooks
  • questions:readRead the daily question
  • questions:voteVote on the daily question

Create your first challenge

curl -X POST https://intayo.com/api/v1/challenges \
  -H "Authorization: Bearer ity_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: mein-lauf-001" \
  -d '{
    "claim": "Ich laufe den Halbmarathon unter zwei Stunden",
    "opponent_email": "[email protected]",
    "stake": "coffee",
    "due_days": 30
  }'

The Idempotency-Key header ensures that retrying after a network error does not create a second challenge.

Endpoints

MethodPathScope
GET/v1/meprofile:read
GET/v1/challengeschallenges:read
POST/v1/challengeschallenges:write
GET/v1/challenges/{id}challenges:read
POST/v1/challenges/{id}/acceptchallenges:write
POST/v1/challenges/{id}/resolvechallenges:write
POST/v1/challenges/{id}/cancelchallenges:write
POST/v1/challenges/{id}/disputechallenges:write
POST/v1/challenges/{id}/evidencechallenges:write
POST/v1/challenges/{id}/supportchallenges:write
GET/v1/challenges/{id}/tallychallenges:read
POST/v1/challenges/{id}/tallychallenges:write
POST/v1/challenges/{id}/tally/reviewchallenges:write
POST/v1/challenges/{id}/tally/disputechallenges:write
POST/v1/challenges/{id}/tally/resolvechallenges:write
GET/v1/eventsevents:read
GET/v1/groupsgroup:read
GET/v1/groups/{id}/membersgroup:read
POST/v1/groups/{id}/membersgroup:manage
GET/v1/groups/{id}/challengesgroup:read
GET/v1/groups/{id}/statsgroup:read
GET/v1/webhookswebhooks:manage
POST/v1/webhookswebhooks:manage
POST/v1/webhooks/{id}/testwebhooks:manage
GET/v1/questions/dailyquestions:read
POST/v1/questions/dailyquestions:vote

Lists return next_cursor — pass that value as cursor on the next call. limit goes up to 100.

Webhooks

Instead of polling, let INTAYO notify you. Every delivery carries a signature in the X-ITY-Signature header. Verify it before using the payload — otherwise anyone can feed your endpoint.

import { createHmac, timingSafeEqual } from 'crypto';

export function verify(secret, header, rawBody) {
  const parts = Object.fromEntries(
    header.split(',').map((p) => p.trim().split('='))
  );
  const alter = Math.abs(Date.now() / 1000 - Number(parts.t));
  if (!(alter < 300)) return false;

  const erwartet = createHmac('sha256', secret)
    .update(`${parts.t}.${rawBody}`)
    .digest('hex');

  return parts.v1.length === erwartet.length &&
    timingSafeEqual(Buffer.from(parts.v1), Buffer.from(erwartet));
}

Failed deliveries are retried five times with growing intervals, after which the subscription is switched off.

Limits and errors

120 read and 30 write calls per minute and token. The X-RateLimit-Remaining and X-Quota-Remaining headers tell you what is left.

invalid_token401
insufficient_scope403
plan_required402
quota_exceeded429
rate_limited429
not_found404
invalid_request400
invalid_state409
conflict409
forbidden403
internal_error500

Every response carries a request_id, also in the X-Request-Id header. Please include it when contacting support.

Respect for the other side

A challenge always involves two people. That is why the API only exposes the other person’s first name — never a surname, never an email address. When you move data into other services, you also move data about someone who does not know about it. Handle it sparingly.

Create a token in settingsINTAYO with Siri