Qudo.ink

API guide

Create cards, issue them to people and manage members from your own systems with the Qudo Ink REST API.

3 min read

The API lets your CRM, sign-up form, ticket shop or HR system do what you'd otherwise do by hand: give someone their membership card the moment they pay, add new staff with their badge, keep Members in sync.

  • Base URL: https://qudo.ink/api/v1
  • Format: JSON in, JSON out
  • Reference: the full OpenAPI description is at /api/v1/openapi.json — import it into Postman, Insomnia or a code generator.

1. Create a key

Open Settings → Developers and tap Create key. Copy it straight away — it's shown once. A key acts for the workspace it was created in: a business key works with that business's cards and members; a personal key with your own cards.

Only owners and admins of a business can create keys, and a key stops working if the person who made it is no longer an owner or admin.

2. Make a request

Send the key in the Authorization header:

curl https://qudo.ink/api/v1/me \
  -H "Authorization: Bearer qk_live_…"

Give someone their card

Design the card once in the app (say, Monthly membership), note its id from the editor's address bar (/dashboard/cards/<id>) or from GET /cards?issued=false, then issue a copy per person:

curl -X POST https://qudo.ink/api/v1/cards/CARD_ID/issue \
  -H "Authorization: Bearer qk_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Amina Okoye",
    "email": "amina@example.com",
    "role": "Members",
    "details": { "tier": "Gold", "validUntil": "2027-06-30" }
  }'

The response is Amina's card, with its url, number (M-00042…) and qr_svg_url. She's added to Members with the role you gave (matched by email, so repeat calls don't duplicate her), and gets that role's automatic cards. Leave out number to use the next one in sequence, or send your own.

Endpoints

MethodPathWhat it does
GET/meThe workspace this key belongs to — handy to test a key
GET/cardsList cards. Filters: kind, issued=true|false, limit (≤ 200), offset
POST/cardsCreate a card: kind, name, title, company, email, phone, website, details, design …
GET/cards/{id}One card
PATCH/cards/{id}Change only the fields you send
DELETE/cards/{id}Delete — its link and QR code stop working
POST/cards/{id}/issueGive one person their own copy (business keys)
GET/membersList members. Filters: role, email, limit, offset
POST/membersAdd or update a member by email; issues their role's automatic cards
GET/print-ordersPrint orders and their status

Card kinds are person, team, membership, badge, event, travel, loyalty and coupon. Each has its own details fields — the same ones you see in the editor (for example tier, memberSince and validUntil on a membership card).

Errors

Every error has the same shape and a matching HTTP status:

{ "error": { "code": "invalid_card", "message": "Add a name so people know whose card this is." } }
StatusMeaning
400The body isn't JSON
401Missing, wrong or revoked key
402That needs an active business plan
403The key's creator is no longer an owner or admin
404Nothing with that id in this workspace
409 / 422The request can't be applied — the message says why
429More than 120 requests a minute for this key

Stay in sync with webhooks

Rather than polling, let us tell you when someone joins with a QR code, gets a card or a print order ships — see Webhooks.

Still stuck? Ask a person.

Email us and someone from the team replies — usually within one working day.

support@qudo.ink