Problems
Every RFC 9457 problem Univents can answer, by status.
Every Univents error is an application/problem+json body: type, status, title, detail and instance are always present, plus errors: [{ field, message }] when request fields are at fault. A problem's type is {API_URL}/problems/{slug}, which the API itself serves as documentation. Branch on the slug at the end of type, not on title or detail. The members listed below a problem are its own, on top of the standard ones.
400
Attendee Email Unknown
attendee-email-unknown — Attendee email does not match an account.
{
"type": "https://api.univents.com.br/problems/attendee-email-unknown",
"status": 400,
"title": "Attendee Email Unknown",
"detail": "…",
"instance": "/…"
}Attendee User Mismatch
attendee-user-mismatch — Attendee user_id does not match the email.
{
"type": "https://api.univents.com.br/problems/attendee-user-mismatch",
"status": 400,
"title": "Attendee User Mismatch",
"detail": "…",
"instance": "/…"
}Batch Failed
batch-failed — Some items of a batch failed; each is answered as its own problem.
| Member | Type | Description |
|---|---|---|
items | object[] |
{
"type": "https://api.univents.com.br/problems/batch-failed",
"status": 400,
"title": "Batch Failed",
"detail": "…",
"instance": "/…",
"items": []
}Card Token Required
card-token-required — Card_token is required for card payments.
{
"type": "https://api.univents.com.br/problems/card-token-required",
"status": 400,
"title": "Card Token Required",
"detail": "…",
"instance": "/…"
}Check In Not Checkpoint
check-in-not-checkpoint — Check-in is only for checkpoint occurrences.
{
"type": "https://api.univents.com.br/problems/check-in-not-checkpoint",
"status": 400,
"title": "Check In Not Checkpoint",
"detail": "…",
"instance": "/…"
}Duplicate Product Line
duplicate-product-line — Duplicate product line.
{
"type": "https://api.univents.com.br/problems/duplicate-product-line",
"status": 400,
"title": "Duplicate Product Line",
"detail": "…",
"instance": "/…"
}Duplicate Program Line
duplicate-program-line — Duplicate program line.
{
"type": "https://api.univents.com.br/problems/duplicate-program-line",
"status": 400,
"title": "Duplicate Program Line",
"detail": "…",
"instance": "/…"
}Edition Already Published
edition-already-published — Edition is already published.
{
"type": "https://api.univents.com.br/problems/edition-already-published",
"status": 400,
"title": "Edition Already Published",
"detail": "…",
"instance": "/…"
}Edition Not Published
edition-not-published — Edition is not published.
{
"type": "https://api.univents.com.br/problems/edition-not-published",
"status": 400,
"title": "Edition Not Published",
"detail": "…",
"instance": "/…"
}Event Not Active
event-not-active — Cannot discontinue non active event.
{
"type": "https://api.univents.com.br/problems/event-not-active",
"status": 400,
"title": "Event Not Active",
"detail": "…",
"instance": "/…"
}Event Not Draft
event-not-draft — Cannot publish non draft event.
{
"type": "https://api.univents.com.br/problems/event-not-draft",
"status": 400,
"title": "Event Not Draft",
"detail": "…",
"instance": "/…"
}Free Order Refund
free-order-refund — Purchase has no payment intent (free order) and cannot be refunded.
{
"type": "https://api.univents.com.br/problems/free-order-refund",
"status": 400,
"title": "Free Order Refund",
"detail": "…",
"instance": "/…"
}Installments Below One
installments-below-one — Installments must be at least 1.
{
"type": "https://api.univents.com.br/problems/installments-below-one",
"status": 400,
"title": "Installments Below One",
"detail": "…",
"instance": "/…"
}Invalid Badge Origin
invalid-badge-origin — Origin must be null or "staff".
{
"type": "https://api.univents.com.br/problems/invalid-badge-origin",
"status": 400,
"title": "Invalid Badge Origin",
"detail": "…",
"instance": "/…"
}Invalid Design Data
invalid-design-data — Invalid design_data.
{
"type": "https://api.univents.com.br/problems/invalid-design-data",
"status": 400,
"title": "Invalid Design Data",
"detail": "…",
"instance": "/…"
}Invalid Gallery URLs
invalid-gallery-urls — Invalid gallery_urls.
{
"type": "https://api.univents.com.br/problems/invalid-gallery-urls",
"status": 400,
"title": "Invalid Gallery URLs",
"detail": "…",
"instance": "/…"
}Invalid Item Type
invalid-item-type — Invalid item_type.
{
"type": "https://api.univents.com.br/problems/invalid-item-type",
"status": 400,
"title": "Invalid Item Type",
"detail": "…",
"instance": "/…"
}Invalid Payment Method
invalid-payment-method — Invalid payment_method.
{
"type": "https://api.univents.com.br/problems/invalid-payment-method",
"status": 400,
"title": "Invalid Payment Method",
"detail": "…",
"instance": "/…"
}Invalid Payssage Webhook Signature
invalid-payssage-webhook-signature — Invalid webhook signature.
{
"type": "https://api.univents.com.br/problems/invalid-payssage-webhook-signature",
"status": 400,
"title": "Invalid Payssage Webhook Signature",
"detail": "…",
"instance": "/…"
}Invalid Request
invalid-request — Invalid request.
{
"type": "https://api.univents.com.br/problems/invalid-request",
"status": 400,
"title": "Invalid Request",
"detail": "…",
"instance": "/…"
}Item Not In Edition
item-not-in-edition — Item does not belong to this edition.
{
"type": "https://api.univents.com.br/problems/item-not-in-edition",
"status": 400,
"title": "Item Not In Edition",
"detail": "…",
"instance": "/…"
}No Items
no-items — Checkout requires at least one item.
{
"type": "https://api.univents.com.br/problems/no-items",
"status": 400,
"title": "No Items",
"detail": "…",
"instance": "/…"
}No Payment Config
no-payment-config — Event has no payment config.
{
"type": "https://api.univents.com.br/problems/no-payment-config",
"status": 400,
"title": "No Payment Config",
"detail": "…",
"instance": "/…"
}One Ticket Per Person
one-ticket-per-person — Only one ticket per person.
{
"type": "https://api.univents.com.br/problems/one-ticket-per-person",
"status": 400,
"title": "One Ticket Per Person",
"detail": "…",
"instance": "/…"
}Payment Method ID Required
payment-method-id-required — Payment_method_id is required for card payments.
{
"type": "https://api.univents.com.br/problems/payment-method-id-required",
"status": 400,
"title": "Payment Method ID Required",
"detail": "…",
"instance": "/…"
}Payment Rejected
payment-rejected — The payment provider refused the payment.
| Member | Type | Description |
|---|---|---|
message | string | The provider's reason. |
{
"type": "https://api.univents.com.br/problems/payment-rejected",
"status": 400,
"title": "Payment Rejected",
"detail": "…",
"instance": "/…",
"message": "…"
}Program Needs Ticket
program-needs-ticket — Program items require a ticket item.
{
"type": "https://api.univents.com.br/problems/program-needs-ticket",
"status": 400,
"title": "Program Needs Ticket",
"detail": "…",
"instance": "/…"
}Program Needs Ticket In Cart
program-needs-ticket-in-cart — Program items require a ticket item in the same cart.
{
"type": "https://api.univents.com.br/problems/program-needs-ticket-in-cart",
"status": 400,
"title": "Program Needs Ticket In Cart",
"detail": "…",
"instance": "/…"
}Program Quantity
program-quantity — Program lines are one session per purchase (quantity must be 1).
{
"type": "https://api.univents.com.br/problems/program-quantity",
"status": 400,
"title": "Program Quantity",
"detail": "…",
"instance": "/…"
}Quantity Below One
quantity-below-one — Item quantity must be at least 1.
{
"type": "https://api.univents.com.br/problems/quantity-below-one",
"status": 400,
"title": "Quantity Below One",
"detail": "…",
"instance": "/…"
}Seller Not In Platform Wallet
seller-not-in-platform-wallet — Seller does not belong to the platform payssage wallet.
{
"type": "https://api.univents.com.br/problems/seller-not-in-platform-wallet",
"status": 400,
"title": "Seller Not In Platform Wallet",
"detail": "…",
"instance": "/…"
}Staff Template With Ticket Type
staff-template-with-ticket-type — A staff badge template cannot target a ticket type.
{
"type": "https://api.univents.com.br/problems/staff-template-with-ticket-type",
"status": 400,
"title": "Staff Template With Ticket Type",
"detail": "…",
"instance": "/…"
}Ticket Needs Attendee
ticket-needs-attendee — Ticket lines require an attendee.
{
"type": "https://api.univents.com.br/problems/ticket-needs-attendee",
"status": 400,
"title": "Ticket Needs Attendee",
"detail": "…",
"instance": "/…"
}Ticket Needs Attendee Email
ticket-needs-attendee-email — Ticket lines require an attendee email.
{
"type": "https://api.univents.com.br/problems/ticket-needs-attendee-email",
"status": 400,
"title": "Ticket Needs Attendee Email",
"detail": "…",
"instance": "/…"
}Ticket Quantity
ticket-quantity — Ticket lines are one per person (quantity must be 1).
{
"type": "https://api.univents.com.br/problems/ticket-quantity",
"status": 400,
"title": "Ticket Quantity",
"detail": "…",
"instance": "/…"
}Unknown Item
unknown-item — Unknown item.
{
"type": "https://api.univents.com.br/problems/unknown-item",
"status": 400,
"title": "Unknown Item",
"detail": "…",
"instance": "/…"
}Validation Failed
validation — The request is malformed or breaks a rule; `errors` names the
offending fields.
{
"type": "https://api.univents.com.br/problems/validation",
"status": 400,
"title": "Validation Failed",
"detail": "…",
"instance": "/…"
}401
API Keys Not Accepted
api-keys-not-accepted — This API takes bearer tokens only, not API keys.
{
"type": "https://api.univents.com.br/problems/api-keys-not-accepted",
"status": 401,
"title": "API Keys Not Accepted",
"detail": "…",
"instance": "/…"
}Email Not Verified
email-not-verified — The caller must verify their email address first.
{
"type": "https://api.univents.com.br/problems/email-not-verified",
"status": 401,
"title": "Email Not Verified",
"detail": "…",
"instance": "/…"
}Invalid API Key
invalid-api-key — The API key is unknown, malformed or revoked.
{
"type": "https://api.univents.com.br/problems/invalid-api-key",
"status": 401,
"title": "Invalid API Key",
"detail": "…",
"instance": "/…"
}Invalid Token
invalid-token — The bearer token does not parse, its signature or issuer is
wrong, or it is not valid yet.
{
"type": "https://api.univents.com.br/problems/invalid-token",
"status": 401,
"title": "Invalid Token",
"detail": "…",
"instance": "/…"
}Token Expired
token-expired — The bearer token has expired; refresh it and retry.
{
"type": "https://api.univents.com.br/problems/token-expired",
"status": 401,
"title": "Token Expired",
"detail": "…",
"instance": "/…"
}Unauthenticated
unauthenticated — The request carries no credentials: no bearer token and no API
key where the operation needs one.
{
"type": "https://api.univents.com.br/problems/unauthenticated",
"status": 401,
"title": "Unauthenticated",
"detail": "…",
"instance": "/…"
}403
Access Level
access-level — The caller's ticket level does not grant access.
| Member | Type | Description |
|---|---|---|
kind | string | What was refused: activity or checkpoint. |
{
"type": "https://api.univents.com.br/problems/access-level",
"status": 403,
"title": "Access Level",
"detail": "…",
"instance": "/…",
"kind": "…"
}Insufficient Role
insufficient-role — The caller's role does not allow the operation.
{
"type": "https://api.univents.com.br/problems/insufficient-role",
"status": 403,
"title": "Insufficient Role",
"detail": "…",
"instance": "/…"
}Invalid Signature Token
invalid-signature-token — Invalid or expired token.
{
"type": "https://api.univents.com.br/problems/invalid-signature-token",
"status": 403,
"title": "Invalid Signature Token",
"detail": "…",
"instance": "/…"
}Ticket Required For Activity
ticket-required-for-activity — A confirmed ticket is required to register for activities.
{
"type": "https://api.univents.com.br/problems/ticket-required-for-activity",
"status": 403,
"title": "Ticket Required For Activity",
"detail": "…",
"instance": "/…"
}Ticket Required For Checkpoint
ticket-required-for-checkpoint — A confirmed ticket is required to pass this checkpoint.
{
"type": "https://api.univents.com.br/problems/ticket-required-for-checkpoint",
"status": 403,
"title": "Ticket Required For Checkpoint",
"detail": "…",
"instance": "/…"
}Token Request Edition Mismatch
token-request-edition-mismatch — Token does not match request edition.
{
"type": "https://api.univents.com.br/problems/token-request-edition-mismatch",
"status": 403,
"title": "Token Request Edition Mismatch",
"detail": "…",
"instance": "/…"
}Token Signature Edition Mismatch
token-signature-edition-mismatch — Token does not match signature edition.
{
"type": "https://api.univents.com.br/problems/token-signature-edition-mismatch",
"status": 403,
"title": "Token Signature Edition Mismatch",
"detail": "…",
"instance": "/…"
}404
Not Found
not-found — The requested resource does not exist.
{
"type": "https://api.univents.com.br/problems/not-found",
"status": 404,
"title": "Not Found",
"detail": "…",
"instance": "/…"
}Not Registered
not-registered — You are not registered for this activity.
{
"type": "https://api.univents.com.br/problems/not-registered",
"status": 404,
"title": "Not Registered",
"detail": "…",
"instance": "/…"
}Signature Request Completed
signature-request-completed — Signature request not found or already completed.
{
"type": "https://api.univents.com.br/problems/signature-request-completed",
"status": 404,
"title": "Signature Request Completed",
"detail": "…",
"instance": "/…"
}Signature Request Handled
signature-request-handled — Signature request not found or already handled.
{
"type": "https://api.univents.com.br/problems/signature-request-handled",
"status": 404,
"title": "Signature Request Handled",
"detail": "…",
"instance": "/…"
}409
Already Refunded
already-refunded — Purchase already refunded.
{
"type": "https://api.univents.com.br/problems/already-refunded",
"status": 409,
"title": "Already Refunded",
"detail": "…",
"instance": "/…"
}Already Registered
already-registered — You are already registered for this activity.
{
"type": "https://api.univents.com.br/problems/already-registered",
"status": 409,
"title": "Already Registered",
"detail": "…",
"instance": "/…"
}Badge Emitted
badge-emitted — This person already has a badge for this edition and origin.
{
"type": "https://api.univents.com.br/problems/badge-emitted",
"status": 409,
"title": "Badge Emitted",
"detail": "…",
"instance": "/…"
}Badge Template Scope Taken
badge-template-scope-taken — This edition already has a template for this scope (default, ticket type, or staff).
{
"type": "https://api.univents.com.br/problems/badge-template-scope-taken",
"status": 409,
"title": "Badge Template Scope Taken",
"detail": "…",
"instance": "/…"
}Edition Overlap
edition-overlap — This edition's dates overlap with another edition of the same event.
{
"type": "https://api.univents.com.br/problems/edition-overlap",
"status": 409,
"title": "Edition Overlap",
"detail": "…",
"instance": "/…"
}Idempotency Key Used
idempotency-key-used — This idempotency key has already been used.
{
"type": "https://api.univents.com.br/problems/idempotency-key-used",
"status": 409,
"title": "Idempotency Key Used",
"detail": "…",
"instance": "/…"
}Items Unavailable
items-unavailable — Some items are no longer available.
{
"type": "https://api.univents.com.br/problems/items-unavailable",
"status": 409,
"title": "Items Unavailable",
"detail": "…",
"instance": "/…"
}Occurrence Full
occurrence-full — This activity occurrence is full.
{
"type": "https://api.univents.com.br/problems/occurrence-full",
"status": 409,
"title": "Occurrence Full",
"detail": "…",
"instance": "/…"
}Occurrence Registration Taken
occurrence-registration-taken — This person is already registered for this activity occurrence.
{
"type": "https://api.univents.com.br/problems/occurrence-registration-taken",
"status": 409,
"title": "Occurrence Registration Taken",
"detail": "…",
"instance": "/…"
}Participation Cancelled
participation-cancelled — Cannot mark attendance: participation was cancelled.
{
"type": "https://api.univents.com.br/problems/participation-cancelled",
"status": 409,
"title": "Participation Cancelled",
"detail": "…",
"instance": "/…"
}Pending Purchase Exists
pending-purchase-exists — This person already has a pending purchase for this edition.
{
"type": "https://api.univents.com.br/problems/pending-purchase-exists",
"status": 409,
"title": "Pending Purchase Exists",
"detail": "…",
"instance": "/…"
}Person Has Ticket
person-has-ticket — This person already has a ticket for this edition.
{
"type": "https://api.univents.com.br/problems/person-has-ticket",
"status": 409,
"title": "Person Has Ticket",
"detail": "…",
"instance": "/…"
}Product Code Taken
product-code-taken — A product with this vendor code already exists in this edition.
{
"type": "https://api.univents.com.br/problems/product-code-taken",
"status": 409,
"title": "Product Code Taken",
"detail": "…",
"instance": "/…"
}Product Line In Purchase
product-line-in-purchase — This product is already in this purchase.
{
"type": "https://api.univents.com.br/problems/product-line-in-purchase",
"status": 409,
"title": "Product Line In Purchase",
"detail": "…",
"instance": "/…"
}Program Line In Purchase
program-line-in-purchase — This program occurrence is already in this purchase.
{
"type": "https://api.univents.com.br/problems/program-line-in-purchase",
"status": 409,
"title": "Program Line In Purchase",
"detail": "…",
"instance": "/…"
}Purchase Status
purchase-status — The purchase's status does not allow a refund.
| Member | Type | Description |
|---|---|---|
purchase_status | string | The purchase's current status. |
{
"type": "https://api.univents.com.br/problems/purchase-status",
"status": 409,
"title": "Purchase Status",
"detail": "…",
"instance": "/…",
"purchase_status": "…"
}Registration Locked
registration-locked — Registration is locked: attendance has been marked.
{
"type": "https://api.univents.com.br/problems/registration-locked",
"status": 409,
"title": "Registration Locked",
"detail": "…",
"instance": "/…"
}Signature Request Not Pending
signature-request-not-pending — Signature request is no longer pending.
{
"type": "https://api.univents.com.br/problems/signature-request-not-pending",
"status": 409,
"title": "Signature Request Not Pending",
"detail": "…",
"instance": "/…"
}Ticket Held
ticket-held — This person already has a ticket for this edition.
{
"type": "https://api.univents.com.br/problems/ticket-held",
"status": 409,
"title": "Ticket Held",
"detail": "…",
"instance": "/…"
}Ticket Unit In Purchase
ticket-unit-in-purchase — This ticket is already in this purchase for this person.
{
"type": "https://api.univents.com.br/problems/ticket-unit-in-purchase",
"status": 409,
"title": "Ticket Unit In Purchase",
"detail": "…",
"instance": "/…"
}Variant Code Taken
variant-code-taken — A product variant with this vendor code already exists in this edition.
{
"type": "https://api.univents.com.br/problems/variant-code-taken",
"status": 409,
"title": "Variant Code Taken",
"detail": "…",
"instance": "/…"
}WS Token Issued
ws-token-issued — This webhook token has already been issued.
{
"type": "https://api.univents.com.br/problems/ws-token-issued",
"status": 409,
"title": "WS Token Issued",
"detail": "…",
"instance": "/…"
}429
Too Many Requests
rate-limited — The caller exceeded the rate limit; retry later.
{
"type": "https://api.univents.com.br/problems/rate-limited",
"status": 429,
"title": "Too Many Requests",
"detail": "…",
"instance": "/…"
}500
Internal Server Error
internal-server-error — The server failed unexpectedly. The cause is logged, never
returned.
{
"type": "https://api.univents.com.br/problems/internal-server-error",
"status": 500,
"title": "Internal Server Error",
"detail": "Internal Server Error",
"instance": "/…"
}503
Identity Unavailable
identity-unavailable — IdentityX could not be reached to check the API key; retry
later.
{
"type": "https://api.univents.com.br/problems/identity-unavailable",
"status": 503,
"title": "Identity Unavailable",
"detail": "…",
"instance": "/…"
}Issue a one-time WebSocket handshake token GET
Owner-only: the caller must be the purchase's `purchaser_id` (anything else is 404 — no existence leak). Issues a fresh one-time token for the raw `WS /ws?token=...` socket: a 32-byte random value stored as its SHA-256 hash, valid 10 minutes, consumed by the first handshake. The token is a handshake-auth shim — it proves prior REST auth for this purchase and nothing more (no refresh dance, no scopes). Reconnect = fresh token: the front re-requests before the 10-minute expiry and re-opens the socket.
Backend
The Univents Go service — events, ticketing, the store. Where it lives, structure, run it.