Contributor API

Push your scraped events into Rifio

Have your own event scraper? Contribute events to Rifio via our REST API. Batch-submit up to 100 events per request and reach thousands of tech event seekers.

Quick Start

1

Get an API key

Generate an API key from your dashboard with the events:write scope.

2

POST your events

Send a JSON array of events to POST /api/v1/events with your key in the Authorization header.

3

Done

Your events are live on Rifio, searchable by text immediately. AI search enables after trust review.

Authentication

All requests require an API key passed in the Authorization header:

Authorization: Bearer rk_live_your_key_here

Your key must have the events:write scope. Generate a key in your dashboard.

Event Schema

Send a JSON body with an events array (1-100 items). Each event accepts these fields:

FieldTypeRequiredDescription
external_idstringrequiredYour unique identifier for this event
source_urlstring (URL)requiredOriginal event page URL
titlestringrequiredEvent title (max 500 chars)
starts_atstring (ISO 8601)requiredEvent start datetime, e.g. "2026-03-15T18:00:00Z"
platformenumoptionalSource platform. Default: "other". Options: luma, eventbrite, meetup, ticketmaster, ics_feed, manual, other, ...
descriptionstringoptionalEvent description (max 10,000 chars)
ends_atstring (ISO 8601)optionalEvent end datetime
timezonestringoptionalIANA timezone, e.g. "Europe/London"
venue_namestringoptionalVenue or location name
citystringoptionalCity name
countrystringoptionalCountry name
latitudenumberoptionalLatitude (-90 to 90)
longitudenumberoptionalLongitude (-180 to 180)
is_virtualbooleanoptionalDefault: false
is_hybridbooleanoptionalBoth in-person and virtual
is_freebooleanoptionalDefault: true
price_minnumberoptionalMinimum ticket price
price_maxnumberoptionalMaximum ticket price
currencystringoptionalDefault: "USD"
is_sold_outbooleanoptionalWhether event is sold out
event_typestringoptionale.g. "conference", "meetup", "workshop"
categoriesstring[]optionalCategory tags (max 20)
tagsstring[]optionalFreeform tags (max 50)
topicsstring[]optionalTopic tags (max 20)
organiser_namestringoptionalOrganiser or host name
organiser_urlstring (URL)optionalOrganiser website
cover_image_urlstring (URL)optionalCover image URL
attendee_countnumberoptionalCurrent attendee/RSVP count
capacitynumberoptionalMaximum capacity

Code Examples

curl -X POST https://rifio.dev/api/v1/events \
  -H "Authorization: Bearer rk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "events": [
      {
        "external_id": "my-event-001",
        "source_url": "https://example.com/events/001",
        "title": "AI Meetup London",
        "starts_at": "2026-03-15T18:00:00Z",
        "city": "London",
        "country": "United Kingdom",
        "is_free": true,
        "organiser_name": "London AI Community",
        "categories": ["ai", "meetup"],
        "platform": "other"
      }
    ]
  }'

Response Format

Success (200)

{
  "data": {
    "inserted": 3,
    "updated": 1,
    "errors": []
  }
}

Validation Error (400)

{
  "error": "Validation failed",
  "details": [
    {
      "path": ["events", 0, "title"],
      "message": "title is required"
    }
  ]
}
401

Invalid or missing API key

403

API key lacks events:write scope

429

Rate limit exceeded

Trust & AI Search

To protect against spam and manage embedding costs, contributed events go through a lightweight trust model:

Immediate visibility

Your events appear on the site and are searchable via text search as soon as they are submitted.

AI search after review

New contributors start as untrusted. Your events won't appear in AI/semantic search results until we review your first batch and mark your key as trusted.

Automatic after trust

Once trusted, all your current and future events automatically get AI embeddings generated. No action needed on your end.

Rate Limits

60

requests per minute (default)

100

events per request (max batch size)

Exceeding the rate limit returns a 429 response. Duplicate events (same external_id + platform) are upserted, not rejected.

Ready to contribute events?

Generate an API key and start pushing events in minutes.