Changelog¶
This file tracks meaningful changes to this guide and the published external contract.
Versioning and deprecation policy¶
Guide updates¶
Editorial changes, clarifications, examples, and navigation updates do not require an API-version bump.
API contract changes¶
- The public API is versioned through
Accept: application/vnd.revento.v1+json. - Breaking response-shape or behavior changes are introduced in a new version.
- When a new version is announced, the previous version remains supported for at least 6 months.
- Deprecation notices are published here and through Revento's integration-management notices.
Documentation corrections¶
A correction aligns this guide with the existing public API behavior. Corrections remain in the current API version, but may still require changes to code written against an earlier version of the guide. Each correction below states the old documented shape and the current contract.
Non-breaking changes inside a version¶
The following may change inside v1 without a version bump:
- Clarified prose, examples, and setup guidance
- Additional examples that do not alter the underlying contract
- New optional fields documented as additive
Changes that always receive explicit notice¶
- New API version availability
- Deprecation of an existing version
- Scope-consent changes that require existing connections to re-consent
- Webhook-delivery changes that affect verification, retry, or payload interpretation
Unreleased¶
This update defines the public v1 contract for the forthcoming release of this guide. It substantially expands and corrects the contract before that release, so no earlier public API version is being deprecated and the 6-month support window does not apply. Future breaking changes after the release of v1 will use a new API version under the policy above.
If you generated a client or implemented response validation from an earlier preview of the guide, regenerate it from the updated OpenAPI document and review the migration notes below.
Added¶
registration_wave.canceled, bringing the webhook catalog to 28 event types. It is sent when an organizer cancels a registration wave.registration_wave.finishedis not sent for a canceled wave.personal_data_withheldon activity resources, in webhook payloads andGET /events/{id}/activities. It distinguishes an empty people field from personal data that was withheld. Unlike the participant resource's flag, this activity-level flag routinely becomestrueduring normal operation; treat that as an ordinary redaction state, not an exceptional failure.fieldonvalidation_errorresponses, identifying the invalid parameter.406 not_acceptablein the error catalog and on read operations.- A complete connection journey covering integration registration, organizer installation, and participant authorization and revocation.
- The machine-readable OpenAPI document and the Schemas & tooling guide.
- Expanded guidance for secret rotation, token lifetimes, cursor handling, webhook operations, and integration-management endpoints.
Changed¶
- Participant identifiers returned by
GET /me/profileandPOST /oauth/tokenare now scoped per integration. This includesprofile.user_id, the token response'suser_id, and theid_tokensubclaim. The value matches the participantidused by installation-token endpoints and webhook payloads. Do not assume it matches a value stored from an earlier response. - Unresolvable cursors return
400 validation_errorwithfield: "cursor". Start pagination again without a cursor instead of retrying the same request. - Every error body includes
request_id. X-Revento-Request-Idis echoed when valid. Missing or invalid values are replaced with a generated correlation id.Acceptis optional. Omitting it, or sending*/*orapplication/*, selects the current version. Unsupported concrete media types return406 not_acceptable.
Corrected documentation¶
The following items correct earlier published guidance. They describe the current v1 contract.
Response envelopes and pagination¶
- List endpoints return
{"items": [...], "next_cursor": ...}. The earlier{data, next_cursor, has_more}shape is not part of the contract. GET /events/{id}returns{"event": ...}andGET /events/{id}/participants/{id}returns{"participant": ...}rather than a bare resource./locationsreturns a flat, paginated list.venue,building,floor, andthreadare bare ids ornull, not nested objects./threads,/locations,/registration-waves,/roles, and/programpaginate with a default page size of 25.limitis clamped to 1-50. A non-numeric value uses the default of 25.413 payload_too_largeis not listed as an API response; reducinglimitis not an error-recovery mechanism.
Resource schemas¶
- The event resource now documents all 35 fields. The organization field is
organization, and the headline location field islocation. - Participant resources do not include
user_id,registered_at,last_reviewed_at,last_reviewer_id, orlast_review_action. They includeis_guest,application_admin_notes, andpersonal_data_withheld. - Registration-wave resources use
start_time,end_time, andbase_activities, and now document all 15 fields. - Location and role resources include
created_atandupdated_at; locations also includevenueandthread. - Activity resources include
players,host,is_global,time_preference, andtype_definition. They do not includeduration_minutesorsigned_up_participant_ids. - Every declared resource field is present; unavailable values are
null. Undeclared resource fields are rejected by the schemas. - Array fields such as
players,markers,co_host_ids,registration_waves, andamenitiesmay benull. Check fornullbefore iterating.
Field types and values¶
languageandtime_preferenceare arrays, not strings.- A thread's
icon_nameandcolor_hexmay benull. min_ageisall_agesor18+. Do not derive constant names directly from enum values.- Timestamp fields do not share one suffix. Use each field's declared format.
capacity_modeisfixedorpercentage;notify_whenis a timestamp.- Closed vocabularies are declared for
publish_status,visibility,capacity_mode,audience,access_mode, and status fields. access_modealso supportspaid_ticket.
Authentication, errors, and profile responses¶
application/jsonis a responseContent-Type, not a supported concreteAcceptvalue. Requestapplication/vnd.revento.v1+json, use a supported wildcard, or omitAccept.- Installation token responses do not include
integration_id. - Token responses do not include
refresh_expires_in. Track the 90-day refresh window from the latest successful refresh. user_idandid_tokenare conditional and always appear together. Both are absent when no participant pseudonym is available.request_idis an opaque correlation string, not necessarily a UUID. A UUID remains a recommended request-header value.insufficient_scopeincludesrequired_scopeas a single scope name.validation_errorincludesfield.GET /me/profilereturns a top-levelprofileobject and does not includelocaleorevent_id.
Webhooks and lifecycle behavior¶
- Webhook envelopes do not include a top-level
id; the delivery identifier is carried byX-Revento-Delivery-Id. Undeclared envelope fields are rejected by the schemas. activity_detailsis a bare identifier, not an object.actor_idon lifecycle notices is an opaque audit reference, not a participant identifier, and cannot be resolved through this API.- Disconnecting an integration does not send a webhook. A subsequent API call returns
401 token_revoked; existing deletion obligations still apply. participant.removedremoves event membership and registration-wave eligibility, but the participant record and application remain available. The person cannot simply re-apply while the existing application stands, except after rejection or a revision request; treat removal as terminal instead of waiting for anotherparticipant.registeredevent.- The public contract uses one OAuth host and one API host. Testing uses the same hosts and an event you control.
Initial release¶
- Initial release of the external integrations developer guide.