Skip to main content

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:
Example:
API keys are generated by the Zupy team and delivered to you during onboarding. You cannot create or rotate keys yourself.

Authentication Flow

1

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.
2

You receive credentials

You receive your zupy_pk_* API key, the company ID, and your integration slug (e.g., repediu).
3

Include X-API-Key in every request

Add the X-API-Key header to all API requests. No Authorization: Bearer — just the header and the key.

Making Authenticated Requests

Include your API key in the X-API-Key header on every request:

Access Levels

API keys have two access levels, configured by Zupy during onboarding: If you attempt a write operation with a read-only key, you receive a 403 Forbidden error.

Endpoint allowlist

Your partner API key can only reach the endpoints documented in this reference — the partner contract. Any other v2 endpoint (consumer, scanner, or internal endpoints) returns 403 Forbidden for a partner key, even though the same path may exist for the dashboard or mobile apps. This is a deliberate, fail-secure default: the partner surface equals exactly what is documented here, and new internal endpoints are never exposed to partner keys by accident.
403 — Endpoint not available to partner keys

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. Every response includes rate limit headers:
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.
If your integration requires OTP for certain actions, see the OTP Flow guide for the complete 3-step verification process.

Security Best Practices

Never expose API keys in frontend or client-side code. All API calls must go through your backend server.
  • 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