Eventdorm API
Power your events with Eventdorm's backend. List events, sell tickets, manage attendees, and accept payments — all through a simple REST API.
Overview
The Eventdorm Partner API lets you build ticketing, registration, and check-in flows directly into your own website or application. You handle the frontend and customer experience; Eventdorm handles the backend — events database, ticket inventory, hosted checkout, QR code generation, email delivery, and real-time attendance tracking.
Common use cases:
- A media site publishing events and selling tickets inline
- A booking platform offering event registration as a service
- A community hub managing member events and check-in
- A festival organizer running multiple events with a unified backend
Multi-tenant by design. Each integration gets its own organization, API keys, webhooks, and data isolation. Your data stays yours.
Base URL
https://api.eventdorm.com/v1
All requests go through api.eventdorm.com. Every response includes CORS headers. Browser calls should use a publishable key and only target the public voting and discount-check endpoints; management endpoints must be called from your server.
Authentication
Management endpoints require a secret API key sent in the Authorization header using the Bearer scheme:
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The public voting and discount-check endpoints accept a publishable key. Publishable keys are safe to embed in browser code because they can only read public campaigns, cast votes, and validate discount codes for your organization.
Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Key types
- Public Key (
pk_live_xxx) — Used forGET /v1/voting/{slug},POST /v1/voting/{slug}/votes, andPOST /v1/events/{event_id}/discounts/check. Safe to expose. Restrict it to your websites with allowed origins. - Secret Key (
sk_live_xxx) — Required for every management endpoint. Keep this server-side.
Publishable keys and CORS
Restrict a publishable key to specific browser origins from Dashboard → Partners → API Keys → Edit origins. Enter one origin per line, for example https://your-site.com. Leaving the list empty allows any origin so new keys work immediately.
Requests from a disallowed origin receive 403 Origin is not allowed for this publishable key. Origin checks apply to browser requests; server-to-server calls without an Origin header are not blocked. Origin allowlisting is a CORS control, so keep keys revocable and rotate them if they are abused.
Environments
- sandboxKeys with
_test_— use for development. No real payments. - productionKeys with
_live_— use for live traffic. Real payments processed.
Security best practices
- Store secret keys in environment variables, never in code or client-side JS
- Use a publishable key, never a secret key, in browsers or mobile apps
- Rotate keys periodically from the dashboard
- If a key is compromised, revoke it immediately and generate a new one
- Full keys are shown only once at generation time
API Endpoints
Events
/v1/eventsList all published events.
Response
{
"ok": true,
"data": [
{
"id": "uuid",
"title": "Tolu W. Art Exhibition",
"slug": "tolu-w-art-exhibition",
"description": "An evening of contemporary art...",
"location": "Lagos, Nigeria",
"starts_at": "2026-07-01T18:00:00Z",
"ends_at": "2026-07-01T22:00:00Z",
"status": "published",
"capacity": 500,
"event_type": "in_person",
"cover_image_url": "https://...",
"is_paid": true,
"price_cents": 5000,
"currency": "NGN",
"created_at": "2026-06-01T10:00:00Z",
"updated_at": "2026-06-15T12:00:00Z"
}
]
}/v1/events/{event_id}Get a single event by ID, including its ticket tiers.
Response
{
"ok": true,
"data": {
"id": "uuid",
"title": "Tolu W. Art Exhibition",
"ticket_tiers": [
{
"id": "uuid",
"name": "VIP",
"price_cents": 15000,
"quantity": 50,
"sold_count": 12,
"is_active": true
}
]
}
}/v1/eventsCreate a new event under your organization.
Request body
{
"title": "My Event",
"description": "Event details...",
"venue": "Lagos, Nigeria",
"start_date": "2026-07-01T10:00:00Z",
"end_date": "2026-07-01T18:00:00Z",
"capacity": 500,
"event_type": "in_person"
}Response
{
"ok": true,
"data": { "id": "uuid", "title": "My Event", ... }
}/v1/events/{event_id}Update one or more fields on an event you own.
Request body
{
"title": "Updated Title",
"venue": "New Venue, Abuja",
"capacity": 1000,
"event_type": "hybrid"
}Response
{
"ok": true,
"data": { "id": "uuid", "title": "Updated Title", ... }
}Tickets
/v1/events/{event_id}/ticketsList all ticket tiers for an event.
Response
{
"ok": true,
"data": [
{
"id": "uuid",
"name": "General Admission",
"description": "Standard entry",
"price_cents": 5000,
"quantity": 200,
"sold_count": 45,
"is_active": true,
"sales_start": "2026-06-01T00:00:00Z",
"sales_end": "2026-07-01T00:00:00Z"
}
]
}/v1/ticketsCreate a new ticket tier for an event you own. If `price` > 0, online payments are automatically enabled for the event.
Request body
{
"event_id": "evt_uuid",
"name": "VIP Pass",
"description": "Includes meet-and-greet",
"price": 15000,
"quantity": 100,
"sales_start": "2026-06-01T00:00:00Z",
"sales_end": "2026-07-01T00:00:00Z",
"visibility": "public"
}Response
{
"ok": true,
"data": { "id": "uuid", "name": "VIP Pass", ... }
}Discounts
/v1/events/{event_id}/discounts/checkValidate a discount code for an event and ticket tier. Safe to call from your checkout UI with a publishable key. The event must belong to the key's organization (legacy events without an organization_id are matched through the organization owner's organizer account); publishable keys can only check published events. This returns the quoted price but does not reserve or consume the code.
Request body
{
"code": "EARLYBIRD",
"tier_id": "tier_uuid",
"quantity": 2
}Response
{
"ok": true,
"data": {
"ok": true,
"message": "Discount applied.",
"discount_code_id": "uuid",
"discount_type": "percent",
"discount_value": 10,
"unit_price_cents": 15000,
"discounted_unit_price_cents": 13500,
"discounted_total_cents": 27000,
"currency": "NGN"
}
}Checkout
/v1/checkoutCreate a checkout. Optionally pass discount_code to apply a code. Paid totals return a Flutterwave payment URL; a total reduced to zero returns the ticket token directly.
Request body
{
"event_id": "evt_uuid",
"ticket_id": "tier_uuid",
"quantity": 2,
"customer_name": "John Doe",
"customer_email": "john@example.com",
"customer_phone": "+2348012345678",
"discount_code": "EARLYBIRD"
}Response
{
"ok": true,
"data": {
"checkout_url": "https://api.flutterwave.com/...",
"tx_ref": "tix_abc_..."
}
}/v1/verify-paymentVerify a Flutterwave payment and retrieve the ticket token after a successful checkout.
Request body
{
"tx_ref": "tix_abc_...",
"transaction_id": "1234567"
}Response
{
"ok": true,
"data": {
"confirmed": true,
"ticket_token": "qr_token_here"
}
}Attendees
/v1/events/{event_id}/attendeesList all ticket purchasers for an event you own.
Response
{
"ok": true,
"data": [
{
"id": "uuid",
"buyer_name": "John Doe",
"buyer_email": "john@example.com",
"buyer_phone": "+2348012345678",
"tier_id": "uuid",
"amount_paid_cents": 5000,
"status": "valid",
"purchased_at": "2026-06-20T14:30:00Z",
"validated_at": null,
"ticket_tiers": { "name": "General Admission" }
}
]
}/v1/attendeesManually register an attendee (comp tickets, guest list).
Request body
{
"event_id": "evt_uuid",
"ticket_id": "tier_uuid",
"name": "Jane Doe",
"email": "jane@example.com",
"phone": "+2348012345678"
}Response
{
"ok": true,
"data": {
"id": "uuid",
"event_id": "evt_uuid",
"buyer_name": "Jane Doe",
"buyer_email": "jane@example.com",
"status": "valid"
}
}Check-In
/v1/checkinValidate a ticket and mark the attendee as checked in.
Request body
{
"ticket_id": "tkt_uuid"
}Response
{
"ok": true,
"data": {
"status": "checked_in",
"timestamp": "2026-06-23T12:00:00Z",
"ticket_id": "tkt_uuid"
}
}QR Codes
/v1/tickets/{ticket_id}/qrRetrieve QR code URL and ticket portal link for a ticket.
Response
{
"ok": true,
"data": {
"qr_url": "https://supabase.co/functions/v1/scan-validate?token=abc...",
"ticket_url": "https://eventdorm.com/t/abc...",
"ticket_id": "tkt_uuid",
"event_id": "evt_uuid"
}
}Broadcast
/v1/events/{event_id}/broadcastSend an email update to all verified attendees of an event.
Request body
{
"subject": "Venue Update",
"message": "The venue has changed to Harbour Point. See you there!"
}Response
{
"ok": true,
"data": {
"sent": 45,
"failed": 0,
"total": 45
}
}Merch — Products
/v1/events/{event_id}/productsList all merch products for an event you own.
Response
{
"ok": true,
"data": [
{
"id": "uuid",
"name": "Festival T-Shirt",
"slug": "festival-t-shirt",
"description": "Premium cotton tee",
"category": "apparel",
"cover_image_url": "https://...",
"price_cents": 5000,
"compare_at_price_cents": 7000,
"status": "active",
"inventory_quantity": 100,
"track_inventory": true,
"has_variants": true,
"units_sold": 23,
"created_at": "2026-06-01T10:00:00Z"
}
]
}/v1/events/{event_id}/productsCreate a new merch product for an event you own.
Request body
{
"name": "Festival T-Shirt",
"description": "Premium cotton tee",
"category": "apparel",
"price_cents": 5000,
"compare_at_price_cents": 7000,
"status": "active",
"inventory_quantity": 100,
"track_inventory": true,
"has_variants": false
}Response
{
"ok": true,
"data": { "id": "uuid", "name": "Festival T-Shirt", ... }
}/v1/products/{product_id}Get a single product by ID, including variants and images.
Response
{
"ok": true,
"data": {
"id": "uuid",
"name": "Festival T-Shirt",
"variants": [
{ "id": "uuid", "name": "Size", "value": "XL", "price_override_cents": null, "inventory_override": null }
],
"images": [
{ "id": "uuid", "url": "https://...", "alt_text": "Front view", "position": 0 }
]
}
}/v1/products/{product_id}Update one or more fields on a product you own.
Request body
{
"name": "Updated T-Shirt",
"price_cents": 6000,
"status": "active"
}Response
{
"ok": true,
"data": { "id": "uuid", "name": "Updated T-Shirt", ... }
}Merch — Orders
/v1/events/{event_id}/ordersList all merch orders for an event you own.
Response
{
"ok": true,
"data": [
{
"id": "uuid",
"customer_name": "John Doe",
"customer_email": "john@example.com",
"customer_phone": "+2348012345678",
"subtotal_cents": 10000,
"delivery_fee_cents": 1500,
"total_cents": 11500,
"currency": "NGN",
"payment_status": "paid",
"fulfilment_status": "unfulfilled",
"flw_tx_ref": "tix_xxx",
"created_at": "2026-06-20T14:30:00Z"
}
]
}/v1/orders/{order_id}Get a single merch order by ID, including items.
Response
{
"ok": true,
"data": {
"id": "uuid",
"customer_name": "John Doe",
"total_cents": 11500,
"payment_status": "paid",
"fulfilment_status": "unfulfilled",
"items": [
{
"id": "uuid",
"product_name": "Festival T-Shirt",
"variant_name": "Size",
"variant_value": "XL",
"quantity": 2,
"unit_price_cents": 5000,
"total_price_cents": 10000,
"fulfilment_method": "delivery"
}
]
}
}Applications
/v1/events/{event_id}/applicationsList all application configs for an event (volunteer, exhibitor, vendor, sponsor, speaker, media).
Response
{
"ok": true,
"data": [
{
"id": "uuid",
"application_type": "exhibitor",
"name": "Exhibitor Applications",
"description": "Apply to showcase at the event",
"is_active": true,
"deadline": "2026-07-15T23:59:59Z",
"max_slots": 50,
"allow_file_uploads": true,
"enable_auto_approval": false,
"created_at": "2026-06-01T10:00:00Z"
}
]
}/v1/events/{event_id}/applicationsCreate an application config for an event you own.
Request body
{
"application_type": "exhibitor",
"name": "Exhibitor Applications",
"description": "Apply to showcase at the event",
"deadline": "2026-07-15T23:59:59Z",
"max_slots": 50,
"allow_file_uploads": true,
"enable_auto_approval": false,
"form_fields": [...],
"is_active": true
}Response
{
"ok": true,
"data": { "id": "uuid", "application_type": "exhibitor", ... }
}/v1/events/{event_id}/applications/{type}Get an application config by type (volunteer, exhibitor, vendor, sponsor, speaker, media, custom).
Response
{
"ok": true,
"data": {
"id": "uuid",
"application_type": "exhibitor",
"name": "Exhibitor Applications",
"description": "Apply to showcase",
"form_fields": [...],
"is_active": true,
"deadline": "2026-07-15T23:59:59Z",
"max_slots": 50,
"allow_file_uploads": true,
"enable_auto_approval": false
}
}/v1/events/{event_id}/applications/{type}Update an application config for an event you own.
Request body
{
"name": "Updated Exhibitor Apps",
"max_slots": 75,
"is_active": true
}Response
{
"ok": true,
"data": { "id": "uuid", "application_type": "exhibitor", ... }
}/v1/events/{event_id}/applications/{type}/submissionsList all submissions for a given application type.
Response
{
"ok": true,
"data": [
{
"id": "uuid",
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"phone": "+2348012345678",
"status": "pending",
"assigned_role": null,
"answers": { "business_name": "Art House", ... },
"created_at": "2026-06-20T14:30:00Z"
}
]
}/v1/events/{event_id}/applications/{type}/submissions/{submission_id}Get a single submission with all details.
Response
{
"ok": true,
"data": {
"id": "uuid",
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"status": "pending",
"answers": { ... },
"files": [...],
"notes": null
}
}/v1/events/{event_id}/applications/{type}/submissions/{submission_id}Update a submission's status (approve, reject, waitlist) or add notes.
Request body
{
"status": "approved",
"assigned_role": "Exhibitor - Art Section",
"notes": "Approved via API"
}Response
{
"ok": true,
"data": { "id": "uuid", "status": "approved", ... }
}Voting
/v1/events/{event_id}/voting/campaignsList all voting campaigns for an event you own, including drafts.
Response
{
"ok": true,
"data": [
{
"id": "uuid",
"event_id": "uuid",
"event_title": "Tolu W. Art Exhibition",
"title": "People's Choice Awards",
"slug": "peoples-choice-awards-a1b2c",
"status": "active",
"effective_status": "active",
"results_visibility": "after_close",
"starts_at": "2026-07-01T10:00:00Z",
"ends_at": "2026-07-08T22:00:00Z",
"published_at": "2026-07-01T09:00:00Z",
"total_votes": 128,
"created_at": "2026-06-20T14:30:00Z",
"updated_at": "2026-07-01T09:00:00Z"
}
]
}/v1/events/{event_id}/voting/campaignsCreate a voting campaign for an event you own. Defaults to a draft with organiser-only results.
Request body
{
"title": "People's Choice Awards",
"description": "Vote for your favourite artist",
"rules_text": "One vote per email address",
"cover_image_url": "https://...",
"slug": "peoples-choice-awards",
"starts_at": "2026-07-01T10:00:00Z",
"ends_at": "2026-07-08T22:00:00Z",
"status": "draft",
"results_visibility": "organizer"
}Response
{
"ok": true,
"data": {
"id": "uuid",
"event_id": "uuid",
"title": "People's Choice Awards",
"slug": "peoples-choice-awards-a1b2c",
"status": "draft",
"results_visibility": "organizer",
"starts_at": "2026-07-01T10:00:00Z",
"ends_at": "2026-07-08T22:00:00Z"
}
}/v1/voting/campaigns/{campaign_id}Get a campaign with its categories and nominees, including drafts and inactive nominees.
Response
{
"ok": true,
"data": {
"id": "uuid",
"event_id": "uuid",
"title": "People's Choice Awards",
"slug": "peoples-choice-awards-a1b2c",
"status": "active",
"effective_status": "active",
"results_visibility": "after_close",
"starts_at": "2026-07-01T10:00:00Z",
"ends_at": "2026-07-08T22:00:00Z",
"total_votes": 128,
"event": { "id": "uuid", "title": "Tolu W. Art Exhibition" },
"categories": [
{
"id": "uuid",
"name": "Best Painting",
"display_order": 0,
"nominees": [
{
"id": "uuid",
"name": "Ada Okafor",
"image_url": "https://...",
"display_order": 0,
"is_active": true
}
]
}
],
"uncategorized": []
}
}/v1/voting/campaigns/{campaign_id}Update campaign details, window, status or results visibility. Cancelling accepts an optional cancellation_reason.
Request body
{
"title": "People's Choice Awards 2026",
"status": "active",
"results_visibility": "public",
"ends_at": "2026-07-10T22:00:00Z"
}Response
{
"ok": true,
"data": { "id": "uuid", "status": "active", ... }
}/v1/voting/campaigns/{campaign_id}/categoriesAdd a category to a campaign you own. Category names must be unique within the campaign.
Request body
{
"name": "Best Painting",
"description": "Pick the strongest painting",
"display_order": 0
}Response
{
"ok": true,
"data": {
"id": "uuid",
"campaign_id": "uuid",
"name": "Best Painting",
"description": "Pick the strongest painting",
"display_order": 0
}
}/v1/voting/campaigns/{campaign_id}/nomineesAdd a nominee. Provide category_id to place it in a category, or omit it for an uncategorised nominee.
Request body
{
"name": "Ada Okafor",
"description": "Mixed-media artist",
"image_url": "https://...",
"category_id": "uuid",
"display_order": 0,
"is_active": true
}Response
{
"ok": true,
"data": {
"id": "uuid",
"campaign_id": "uuid",
"category_id": "uuid",
"name": "Ada Okafor",
"display_order": 0,
"is_active": true
}
}/v1/voting/campaigns/{campaign_id}/resultsGet live vote counts per nominee and category, ranked highest-first. Organisers can always read results regardless of results_visibility.
Response
{
"ok": true,
"data": {
"campaign_id": "uuid",
"title": "People's Choice Awards",
"status": "active",
"effective_status": "active",
"results_visibility": "after_close",
"total_votes": 128,
"nominees": [
{
"nominee_id": "uuid",
"name": "Ada Okafor",
"category_id": "uuid",
"category_name": "Best Painting",
"votes": 74,
"rank": 1,
"is_active": true
}
],
"categories": [
{ "category_id": "uuid", "name": "Best Painting", "votes": 74 }
]
}
}/v1/voting/{slug}Read a public campaign and its active nominees. Requires a publishable key and only returns campaigns owned by your organization. Drafts return 404. Results are included only when results_visibility allows them.
Response
{
"ok": true,
"data": {
"id": "uuid",
"slug": "peoples-choice-awards-a1b2c",
"title": "People's Choice Awards",
"description": "Vote for your favourite artist",
"rules_text": "One vote per email address",
"starts_at": "2026-07-01T10:00:00Z",
"ends_at": "2026-07-08T22:00:00Z",
"status": "active",
"effective_status": "active",
"results_visibility": "after_close",
"show_results": false,
"event": { "id": "uuid", "title": "Tolu W. Art Exhibition" },
"categories": [
{
"id": "uuid",
"name": "Best Painting",
"nominees": [
{ "id": "uuid", "name": "Ada Okafor", "image_url": "https://..." }
]
}
],
"uncategorized": [],
"results": []
}
}/v1/voting/{slug}/votesCast one vote from a browser or your own voting UI. Requires a publishable key. Send a request_id UUID to make retries idempotent. Errors: 400 invalid input, 409 already voted or not started, 410 ended, 429 rate limited, 404 unavailable.
Request body
{
"nominee_id": "uuid",
"email": "voter@example.com",
"request_id": "uuid"
}Response
{
"ok": true,
"data": { "code": "ok", "replayed": false }
}Hosted Checkout
The POST /v1/checkout endpoint handles the full purchase flow so you don't need to build a checkout UI.
- Create a checkout — Call
POST /v1/checkoutwith the event, ticket tier, and customer info. - Redirect the buyer — For paid tiers, send the customer to the
checkout_url(a Flutterwave-hosted payment page that supports card, USSD, bank transfer, and mobile money). For free tiers, theticket_tokenandticket_idare returned directly. - The buyer completes payment — On Flutterwave's page, the buyer pays and is redirected back to your site.
- Ticket email is sent — As soon as payment is confirmed, the buyer receives a beautifully designed email with their QR code entry pass and event details.
- Verify payment — Use
POST /v1/verify-paymentwith thetx_refandtransaction_idto confirm payment was successful and get the ticket token.
Webhooks
Supported events
Delivery format
Webhooks are delivered as HTTP POST requests to your configured endpoint URL.
{
"event": "attendee.created",
"timestamp": "2026-06-23T12:00:00Z",
"data": {
"attendee_id": "uuid",
"event_id": "uuid",
"attendee_name": "John Doe",
"attendee_email": "john@example.com"
}
}Headers
Content-Type: application/json
X-Eventdorm-Signature: sha256=abc...
X-Eventdorm-Event: attendee.created
X-Eventdorm-Delivery-Id: uuid
Signature verification
Every webhook includes an HMAC SHA256 signature. Verify it using your webhook secret to confirm the payload came from Eventdorm:
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(JSON.stringify(payload))
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}Retry schedule
If your endpoint doesn't respond with a 2xx status within 5 seconds, Eventdorm retries up to 5 times with exponential backoff: 1 minute → 5 minutes → 30 minutes → 6 hours → 24 hours.
Managing webhooks
Configure webhooks from your Partner API dashboard. You can add multiple endpoints, each with its own signing secret. View delivery logs including status, HTTP response code, and response body for debugging.
Code Examples
Quickstart snippets in popular languages.
# List all events
curl -H "Authorization: Bearer sk_live_xxx" \
https://api.eventdorm.com/v1/events
# Create an event
curl -X POST \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"title":"My Event","start_date":"2026-07-01T10:00:00Z","venue":"Lagos"}' \
https://api.eventdorm.com/v1/events
# Create a ticket tier
curl -X POST \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"event_id":"evt_uuid","name":"VIP","price":15000,"quantity":100}' \
https://api.eventdorm.com/v1/tickets
# Check in an attendee
curl -X POST \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"ticket_id":"tkt_uuid"}' \
https://api.eventdorm.com/v1/checkin
# List merch products
curl -H "Authorization: Bearer sk_live_xxx" \
https://api.eventdorm.com/v1/events/{event_id}/products
# List applications
curl -H "Authorization: Bearer sk_live_xxx" \
https://api.eventdorm.com/v1/events/{event_id}/applications
# List submissions for an application type
curl -H "Authorization: Bearer sk_live_xxx" \
https://api.eventdorm.com/v1/events/{event_id}/applications/exhibitor/submissionsErrors
All errors follow a consistent format:
{
"ok": false,
"error": "A human-readable description of the problem"
}HTTP status codes
Rate Limits
The current rate limit is 100 requests per minute per API key. Exceeding this limit returns a 429 Too Many Requests response.
If your integration requires higher limits, contact support at support@eventdorm.com.
Pricing
Free for all partners
The Partner API is completely free. There are no tiered plans, no monthly fees, and no hidden costs. You only pay the standard 5% platform fee on paid ticket transactions (free events incur no fees).
- ✓ Unlimited events
- ✓ Unlimited tickets
- ✓ Hosted checkout
- ✓ Webhook support
- ✓ Email notifications + QR codes
- ✓ All API endpoints
FAQ
How do I get API access?
Go to your dashboard → Partners → Request Access. An admin will review and approve your request. Once approved, you can generate API keys immediately.
Can I use the API without a hosted checkout page?
Yes. The checkout endpoint is optional. You can create tickets and attendees programmatically using the POST /v1/attendees endpoint.
What happens if my webhook endpoint is down?
Eventdorm retries delivery up to 5 times over 24 hours (1min → 5min → 30min → 6h → 24h). After all attempts fail, the delivery is marked as failed.
Can I have multiple API keys?
Yes. You can generate multiple key pairs for different environments (sandbox vs production) or different applications. Each key pair is independently revocable.
Is my data isolated from other partners?
Yes. Every API key belongs to a single organization. All database queries are scoped to your organization. No cross-tenant data access is possible.
What languages can I use?
Any language that can make HTTP requests. The API is RESTful with JSON request/response bodies.
Support
Need help with the API? Here's how to reach us:
- Email: support@eventdorm.com
- API Status: status.eventdorm.com
