Public API to Convex: How to Move Your Data
Load data from a REST API into Convex with Airbyte. Building in Connector Builder, Convex naming rules, and why full refreshes are risky on a live app table.

Moving data from a REST API into Convex is an application pipeline rather than an analytical one. Convex is a backend platform your product reads from at request time, so this exists to give an application data from somewhere else: a vendor's catalogue, an internal service, a partner feed that your users need to see.
One clarification first, because it costs people an afternoon. Airbyte has a connector named Public APIs, and it does not mean any public API: it syncs the catalogue at publicapis.org. For your own API or a third party's, the route is Connector Builder, and this guide covers that path into Convex.
REST API to Convex at a glance:
Why move data from a REST API to Convex?
Two situations account for most of these pipelines, and neither is analysis.
The first is serving third-party data inside your product. A price list, a catalogue, a directory that lives behind somebody else's API and that your users expect to see instantly. Calling that API on every page load is slow, fragile and rate-limited; reading it from Convex is none of those things.
The second is removing a dependency from your request path. If the vendor's API is down, a pipeline that syncs hourly means your product carries on with slightly stale data rather than failing. If you want to analyse this data rather than serve it, a warehouse is the destination and the REST API guides for those cover it.
What do you need before you start?
Most of this is reading the API's documentation carefully, which is the harder skill:
An authentication method and a pagination scheme you understand. Bearer token, API key, basic auth or OAuth, and page numbers, offsets or a cursor token. Getting pagination wrong is the most common reason a custom connector returns exactly one page and looks like it worked.
A Convex deployment URL and access key. Both found in your Convex dashboard. Note that the destination is a beta integration, so validate its behaviour on a non-critical table before a product feature depends on it.
Stream names that satisfy Convex's rules. Table names may contain only letters, digits and underscores, and must not start with an underscore. Because you are defining the streams yourself in Connector Builder, this is entirely within your control, which is a small advantage over a fixed connector.
An answer on incremental filtering. Does any endpoint accept an updated_since parameter or equivalent? If yes, configure a datetime cursor. If not you are doing full refresh, which on this destination carries a specific warning covered below.
Finally, remember that Airbyte imports into Convex rather than exporting from it. This is a one-way pipeline into your application's backend.
How do you build a REST API to Convex pipeline in Airbyte?
Step 1: Check whether a connector already exists
Before building anything, search the catalogue for the service you are integrating. With 600+ connectors available, a maintained one is a real possibility, and it will handle the rate limits, schema changes and pagination quirks you would otherwise discover yourself. Only build when nothing fits.
Step 2: Define the connector in Connector Builder
Connector Builder is the low-code interface for defining a real source connector, which then behaves like any catalogue connector including in scheduling and state management. Configure authentication, then pagination, then your streams, pointing Builder at the record array inside each response since most APIs wrap results in an envelope. Name your streams to satisfy Convex's rules while you are here.
Step 3: Configure the Convex destination
Click Destinations, then New Destination, and select Convex, following adding a destination. Supply your deployment URL and access key. Airbyte adds its own metadata fields to each document, so plan for your application code to ignore them or read through a query that strips them.
Step 4: Create the connection and choose a sync mode
Click Connections, then New connection, select your streams and a sync mode. Incremental deduped is what you want for an application table, since it maintains current state. Set the frequency against how often the source data actually changes and how stale your product can tolerate being.
The testing panel in Builder runs live requests as you configure, so validate pagination against real responses before publishing rather than after your first sync returns one page into a table your product reads.
Why avoid full refreshes on this destination?
Because Convex's documentation warns that performance may degrade on very large full refresh syncs. That matters more here than the same warning would elsewhere, since the table being rebuilt is one your application is reading from at the same time.
It also interacts with the API question from the prerequisites. If your source offers no way to filter by modification time, full refresh is your only option, and that combination, a large table plus an unavoidable rebuild, is the one to identify before you build rather than after your product feels it.
Where that is your situation, two things help. Sync less often, since a catalogue that changes weekly does not need rebuilding hourly. And consider whether the whole dataset needs to reach Convex at all, or whether a filtered subset defined in Connector Builder would serve the product just as well.
What does incremental deduped actually give you?
A snapshot rather than a history. Each record is updated in place, so the table reflects the current state of the source and carries no record of what a value used to be.
For an application backend that is exactly right, because a product showing a price wants today's price rather than every price it has ever been. It is worth stating explicitly because it differs from what the same sync mode gives you on a warehouse, where append-and-dedupe patterns often preserve versions underneath.
So if anyone downstream wants to know how a value changed over time, that is a different pipeline into a different destination rather than something to extract from this table later. Establish that before somebody assumes the history is there.
Frequently asked questions
Is the Public APIs connector what I want?
Only if you specifically want data from publicapis.org. For your own API or a third party's, use Connector Builder.
Why was my table name rejected?
Convex table names may contain only letters, digits and underscores, and must not begin with an underscore. Since you define stream names in Connector Builder, adjust them there.
Can I export data out of Convex with Airbyte?
No. This is an import path into Convex rather than a source connector, so it is one-way into your application's backend.
Does my table keep a history of changes?
No. Incremental deduped maintains current state by updating records in place, which suits an application and means no version history exists to query later.
Can I do this without writing code?
Yes. Connector Builder is a user interface and the whole setup is UI-driven. What you need is the ability to read the API's documentation, which is the harder skill.
Get your REST API data into Convex
Check the catalogue before building, name your streams to satisfy Convex's rules while you define them, use incremental deduped so the table holds current state, and establish early whether the API lets you filter by modification time, because a large table you can only rebuild is the situation to avoid.
Airbyte's connector catalog includes 600+ pre-built connectors, so it is worth looking before you build. For the same approach pointed at a warehouse, see REST API to Snowflake, and for a database feeding the same application backend, MySQL to Convex.
Integrate with 700+ apps using Airbyte
Move data from 700+ sources into warehouses, lakes, and beyond. Set up pipelines in minutes with pre-built connectors and the Connector Builder.
