Preview a group behind an invite code

GEThttps://api.wapito.com/v1/groups/invite/{code}

Send a channel token on every request: Authorization: Bearer wpt_YOUR_TOKEN

Looks up the subject, icon, owner and participant count of a group from its invite code without joining it. Use it to show the user what they are about to join, or to check that a link your workflow stored is still valid. A revoked or malformed code resolves to `not_found`.

Parameters

NameInTypeRequiredDescriptionExample
codepathstringRequiredInvite code, the tail of a `chat.whatsapp.com` link.HkQ2ZpL9vRtAeYm1

Responses

200

A preview of the group.

Fields of the 200 response
FieldTypeRequiredDescription
created_atstring | nullRequiredISO 8601 creation timestamp.date-time
descriptionstring | nullRequiredGroup description shown in group info.
idstringRequiredGroup id ending in `@g.us`.
invite_codestring | nullRequiredCurrent invite code, when the channel is an admin.
is_announcebooleanRequiredTrue when only admins may post.
is_community_announcebooleanRequiredTrue when this is a community announcement group.
is_lockedbooleanRequiredTrue when only admins may edit group info.
ownerstring | nullRequiredId of the account that created the group.
participantsarray of objectOptionalEvery participant, on single-group answers (create, get, update, invite accept and preview). List pages leave it out — read the group to get it.
idstringRequiredParticipant id in `@s.whatsapp.net` form.
joined_atstring | nullRequiredISO 8601 timestamp the participant joined, when known.date-time
lidstring | nullRequiredLID when the participant is addressed by LID.
namestring | nullRequiredDisplay name known to the channel.
phonestring | nullRequiredPhone number in digits.
rolestringRequiredRole inside the group.one of member, admin, superadmin
participants_countintegerRequiredNumber of participants including admins.
picturestring | nullRequiredGroup icon URL.
settingsobjectRequiredGroup security settings; every field maps to one WhatsApp admin toggle.
info_admin_onlybooleanRequiredOnly admins may change subject, description and icon.
member_add_modestringRequiredWho may add participants directly.one of admin_add, all_member_add
membership_approvalbooleanRequiredNew joiners land in the join-request queue instead of the group.
messages_admin_onlybooleanRequiredOnly admins may post (announcement group).
subjectstringRequiredGroup name shown in the chat list.
{
  "created_at": "2026-08-02T09:14:00.000Z",
  "description": "Coordination for the Q3 launch. Keep it on topic.",
  "id": "120363041234567890@g.us",
  "invite_code": "HkQ2ZpL9vRtAeYm1",
  "is_announce": false,
  "is_community_announce": false,
  "is_locked": false,
  "owner": "15557654321@s.whatsapp.net",
  "participants_count": 24,
  "picture": "https://pps.whatsapp.net/v/t61.24694-24/group_n.jpg",
  "settings": {
    "info_admin_only": true,
    "member_add_mode": "admin_add",
    "membership_approval": true,
    "messages_admin_only": false
  },
  "subject": "Acme Launch Team"
}

401

The channel token is missing, malformed, revoked or belongs to a deleted channel.

Show 2 example bodies

token_revoked — the token was rotated in the dashboard

{
  "error": {
    "code": "token_revoked",
    "message": "This channel token has been revoked.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

unauthorized — no or unusable Bearer token

{
  "error": {
    "code": "unauthorized",
    "message": "Missing or invalid channel token.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

403

The token is valid but the channel may not perform this action right now.

Show 2 example bodies

channel_locked — billing lapsed or the channel was locked by an operator

{
  "error": {
    "code": "channel_locked",
    "details": {
      "reason": "plan_required"
    },
    "message": "This channel is locked.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

forbidden — the channel does not own the target object

{
  "error": {
    "code": "forbidden",
    "message": "You are not allowed to perform this action.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

404

The addressed object does not exist, or the number is not on WhatsApp.

Show 3 example bodies

message_not_found — the message id is unknown to the engine

{
  "error": {
    "code": "message_not_found",
    "message": "The requested message does not exist.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

not_found — unknown id

{
  "error": {
    "code": "not_found",
    "message": "The requested resource does not exist.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

not_on_whatsapp — the number is not registered

{
  "error": {
    "code": "not_on_whatsapp",
    "message": "This number is not registered on WhatsApp.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

409

The channel is in the wrong state for this action, or the account type does not support it.

Show 3 example bodies

business_account_required — labels need WhatsApp Business

{
  "error": {
    "code": "business_account_required",
    "message": "This action requires a WhatsApp Business account.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

channel_not_connected — link the number first

{
  "error": {
    "code": "channel_not_connected",
    "details": {
      "status": "qr"
    },
    "message": "The channel is not connected.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

channel_not_in_qr_state — no QR available while the session boots

{
  "error": {
    "code": "channel_not_in_qr_state",
    "details": {
      "status": "created"
    },
    "message": "The channel is not waiting for a QR scan.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

429

A rate limit, a plan quota or one of the anti-ban guards stopped the request. Every one of these is safe to retry later; read `Retry-After` when present.

Show 5 example bodies

cold_send_limit — too many first messages to new recipients this hour

{
  "error": {
    "code": "cold_send_limit",
    "details": {
      "resets_at": "2026-09-15T09:00:00.000Z",
      "window_cap": 20
    },
    "message": "The hourly limit for messages to new recipients is reached.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

quota_exceeded — plan quota for the day or month

{
  "error": {
    "code": "quota_exceeded",
    "details": {
      "quota": "sent",
      "resets_at": "2026-09-16T00:00:00.000Z",
      "used": 150
    },
    "message": "The plan quota for this resource is exhausted.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

rate_limited — per-minute API rate limit

{
  "error": {
    "code": "rate_limited",
    "details": {
      "retry_after": 12
    },
    "message": "Too many requests.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

send_rate_limited — the send queue did not drain within 20 s

{
  "error": {
    "code": "send_rate_limited",
    "details": {
      "retry_after": 5
    },
    "message": "The send queue for this channel is saturated.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

warmup_limit — the warm-up ladder cap for today

{
  "error": {
    "code": "warmup_limit",
    "details": {
      "cap": 200,
      "day": 2
    },
    "message": "The warm-up limit for this channel is reached.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

500

Something went wrong inside Wapito. Quote `request_id` when reporting it.

Show the example body

internal_error — unexpected failure

{
  "error": {
    "code": "internal_error",
    "message": "Something went wrong on our side.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

502

The engine answered with an error Wapito could not translate into a more specific code.

Show the example body

engine_error — unexpected engine failure

{
  "error": {
    "code": "engine_error",
    "details": {
      "engine": "gows",
      "status": 500
    },
    "message": "The WhatsApp engine returned an error.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

503

The engine session is not reachable. Retry with backoff.

Show the example body

engine_unavailable — engine down or restarting

{
  "error": {
    "code": "engine_unavailable",
    "details": {
      "engine": "gows"
    },
    "message": "The WhatsApp engine is unavailable.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

504

The engine did not answer before the upstream timeout.

Show the example body

engine_timeout — no answer within the deadline

{
  "error": {
    "code": "engine_timeout",
    "details": {
      "timeout_ms": 20000
    },
    "message": "The WhatsApp engine did not respond in time.",
    "request_id": "req_01JRQ8F4X9N2K7YB3C5V6W8H0T"
  }
}

Errors

Code examples

import requests

url = "https://api.wapito.com/v1/groups/invite/HkQ2ZpL9vRtAeYm1"

headers = {"Authorization": "Bearer wpt_YOUR_TOKEN"}

response = requests.get(url, headers=headers)

print(response.json())

Used in

Related

Try it on your own number

Create a channel, link a WhatsApp number by QR or pairing code, and call the API in a couple of minutes. The Sandbox plan is free and needs no card.