Skip to main content

title: “Requirements & Constraints” description: “Authentication, environments, webhook security, pagination, rate limits and conditional fields for the Channel Manager API.” ---## Authentication All requests must include your API key in the X-Api-Key HTTP header:
curl --request GET \
  --url 'https://channels-service-alpha.fourvenues.com/auth' \
  --header 'X-Api-Key: YOUR_API_KEY_HERE'

Getting an API key

API keys are provisioned by the Fourvenues team. To request one, contact integrations@fourvenues.com and include: - Your marketplace/channel name and company details - The venues (hosts) you have or plan to have partnerships with - The integration you are building (e.g. “ticket marketplace”, “event aggregator”) - The endpoints you need access to
API keys are channel-scoped: they grant access only to venues that have explicitly added your channel as a partner. If a venue removes you as a partner, events from that venue will no longer appear in your API responses.

Key lifecycle

PropertyDetail
ExpiryKeys have a limited lifespan and must be rotated before expiry.
RevocationKeys can be revoked immediately if misused.
ScopeEach key is tied to a specific channel and its partner venues.
---## Environments
EnvironmentBase URLPurpose
Alphahttps://channels-service-alpha.fourvenues.comDevelopment & testing — isolated data, no real payments
Productionhttps://channels-service.fourvenues.comLive data — use only when fully tested
The alpha environment contains test data only. Always validate your integration end-to-end (including the webhook flow) in alpha before switching to production keys.
To verify connectivity:
curl --request GET \
  --url 'https://channels-service-alpha.fourvenues.com/auth' \
  --header 'X-Api-Key: YOUR_API_KEY_HERE'
A valid response includes your channel identity and all authorized host venues. ---## Conditional required fields

List creation (POST /lists)

The fields required when creating a guest list entry depend on the list rate configuration. Always fetch the list rate first and check:
Flag on list rateMeaning
requires_full_name: truename is required in the request body
requires_email: trueemail is required in the request body
requires_phone: truephone is required in the request body
Example — list rate with email + name required (phone optional):
{
  "rate_id": "lr_888",
  "event_id": "ev_abc123",
  "name": "Jane Doe",
  "email": "jane@example.com",
  "for": 2
}
Submitting without a required field returns 422 Unprocessable Entity.

Ticket checkout (POST /tickets/checkout)

FieldRequired?Notes
redirect_urlRequiredURL the user lands on after successful payment
error_urlRequiredURL the user lands on after failed payment
ticket_rate_idRequiredThe rate the user is purchasing
ticketsRequiredArray with at least one ticket object
tickets[].emailDepends on fields config of the rate
tickets[].full_nameDepends on fields config of the rate
tickets[].price_idOptionalID of the price you displayed; returns conditions_changed flag
tickets[].supplementsOptionalArray of supplement IDs
tickets[].warrantyRequired only if rate has warranty enabledBoolean
discount_codeOptionalApplied to all tickets in the session
send_resourcesOptionalIf true, Fourvenues sends ticket by email/SMS/WhatsApp
metadataOptionalFree-form JSON object, max 1 KB — useful for your internal IDs
---## Webhooks Webhooks allow you to receive real-time notifications when payments complete or refunds are requested. See the full guide at Webhook Introduction.

Setting up a webhook endpoint

curl --request POST \
  --url 'https://channels-service-alpha.fourvenues.com/webhooks' \
  --header 'X-Api-Key: <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{
    "url": "https://myapp.com/webhooks/fourvenues",
    "events": ["payment.success", "ticket.refund_request"]
  }'

Verifying webhook signatures

Each webhook delivery includes a signature header so you can confirm the request is genuinely from Fourvenues. See Webhook Authentication for the verification algorithm.
Never process a webhook without verifying its signature. Always validate the signature before updating your database or fulfilling orders.

Available webhook events

EventTriggered when
payment.successA buyer completes payment for a checkout session
ticket.refund_requestA buyer requests a refund for their ticket
---## Pagination
ParameterTypeDescription
pageintegerPage number starting at 1
limitintegerResults per page (default varies per endpoint)
start_datestring (YYYY-MM-DD or ISO 8601)Start of date range filter
end_datestring (YYYY-MM-DD or ISO 8601)End of date range filter
organization_idstringFilter events by a specific host organization
location_idstringFilter events by venue location
---## Rate limits - Burst requests: Avoid more than 10 requests per second from a single API key. - 429 responses: If you receive 429 Too Many Requests, implement exponential backoff before retrying. - Webhook retries: If your endpoint returns a non-2xx status, Fourvenues will retry the delivery with backoff. Ensure your endpoint responds quickly (< 5 seconds) and processes asynchronously. ---## Common errors
HTTP StatusCauseFix
401 UnauthorizedMissing or invalid X-Api-KeyCheck the header name and key value
403 ForbiddenKey doesn’t have access to this endpoint or venueContact the Fourvenues team to update your key scope, or verify the venue has added your channel
404 Not FoundResource doesn’t exist or is not accessible to your channelVerify the _id or slug; confirm the venue is a partner
422 Unprocessable EntityMissing required field or invalid valueCheck the request body against the list rate’s requires_* flags and the API reference
429 Too Many RequestsRate limit exceededImplement exponential backoff
500 Internal Server ErrorUnexpected server errorRetry once; if persistent, contact support
---## Security considerations - Never expose your API key client-side — all requests must go through your backend. - Validate webhook signatures before acting on any webhook payload. - Rotate keys regularly — contact the Fourvenues team to issue a new key. - Use HTTPS only — HTTP requests are rejected at the infrastructure level. - Store metadata wisely — the metadata field is not encrypted; do not store sensitive PII there.