Overview
Zupy uses API key authentication for all partner API access. Each restaurant (company) you integrate with gets its own API key, provisioned by the Zupy team during onboarding.- One key per restaurant — if you integrate with 3 restaurants, you receive 3 API keys
- No OAuth flows — authenticate once per request with a single header
- No self-service — keys are provisioned by Zupy ops, not generated in a dashboard
API Key Format
All partner API keys follow this format:API keys are generated by the Zupy team and delivered to you during onboarding. You cannot create or rotate keys yourself.
Authentication Flow
Zupy provisions your key
During onboarding, the Zupy team creates your API key and assigns it to a specific restaurant (company). You also receive your webhook URL.
You receive credentials
You receive your
zupy_pk_* API key, the company ID, and your integration slug (e.g., repediu).Making Authenticated Requests
Include your API key in theX-API-Key header on every request:
Access Levels
API keys have two access levels, configured by Zupy during onboarding:| Level | Can Do | Cannot Do |
|---|---|---|
| Read-only | Search customers, view points/rewards/coupons, list programs | Award points, redeem rewards, validate coupons |
| Read-write | Everything above + award points, redeem rewards, validate coupons | N/A |
403 Forbidden error.
Error Handling
All authentication errors follow the RFC 7807 Problem Details format.Rate Limits
API requests are rate-limited per API key. Your tier is assigned during onboarding.| Tier | Requests/min | Assigned To |
|---|---|---|
| Free | 60 | Default for new integrations |
| Standard | 300 | Active partners (e.g., Repediu, Saipos) |
| Enterprise | 3,000 | High-volume partners |
The
Retry-After header (seconds to wait) is only included in 429 responses. When you receive a 429, wait for the Retry-After duration before retrying.OTP — Optional Per-Integration
OTP (One-Time Password) provides extra customer verification. OTP is NOT required for all partners — it depends on your integration’s trust level, configured by Zupy during onboarding.| Action | OTP Possible? | Depends On |
|---|---|---|
| Search customers | Never | — |
| View points balance/history | Never | — |
| Award points | Never | B2B operation |
| List rewards/coupons | Never | — |
| Redeem reward | Per config | require_otp_for_redemption |
| Validate/use coupon | Per config | require_otp_for_coupon_usage |
| Send webhook | Never | — |
Partner examples
Partner examples
| Partner | Enrollment OTP | Redemption OTP | Coupon OTP | Trust Partner | Rationale |
|---|---|---|---|---|---|
| Repediu | No | No | No | Yes | iFood/Rappi already verify customer identity |
| Goomer | No | Yes | Yes | No | Open tablet — customer types phone, no prior verification |
| Saipos | No | Yes | Yes | Yes | POS identifies customer, but coupon usage needs confirmation |
Security Best Practices
- Always use HTTPS — HTTP requests are rejected
- Store keys in environment variables — never hardcode in source code
- One key per restaurant — do not share keys between companies
- Contact Zupy immediately if you suspect a key has been compromised
Next Steps
Quick Start
Get your first API call working in under 15 minutes
Webhook Setup
Send order data to Zupy for automatic loyalty processing
OTP Flow
Implement customer identity verification when required