Tag your APIs.
Query for data using TaxiQL.
Taxi handles the orchestration.
Describe what you want. Taxi handles the rest.
Traditional API integration requires writing and maintaining complex orchestration code. With Taxi, you simply describe the data you need, and Taxi automatically discovers how to fetch it.
Manual orchestration code that needs maintenance when APIs change
// Without Taxi: The integration code you actually write
async function getOrdersWithDetails(customerId) {
const customer = await customerApi.getCustomer(customerId);
const orders = await orderApi.getOrdersByCustomer(customerId);
const enrichedOrders = await Promise.all(
orders.map(async (order) => {
const [shipping, payment] = await Promise.all([
shippingApi.getTracking(order.trackingId).catch(() => null),
paymentApi.getPayment(order.paymentId).catch(() => null),
]);
return {
orderId: order.id,
total: order.total,
customerName: customer.name,
shippingStatus: shipping?.status ?? 'unknown',
paymentMethod: payment?.method,
};
})
);
return enrichedOrders;
}Declarative query that adapts automatically as your APIs evolve
Taxi automatically discovers data by joining across services. Click "Show Query Plan" to see how Taxi builds the integration.
BYO API Specs
Taxi works with your existing API schemas and specs - simply embed tags to show how data relates.
Alternatively, use Taxi to describe your APIs, CSV files, Event payloads and more
# An extract of an OpenAPI spec:
components:
schemas:
Customer:
properties:
id:
type: string
# Embed semantic type metadata directly in OpenAPI
x-taxi-type:
name: CustomerId
You query. Taxi integrates & adapts.
Write queries for data using the same tags you embedded in your API specs. Taxi's query engine handles the integration, linking across APIs, databases, Kafka topics, S3 buckets, the lot.
There's no resolvers or glue code to maintain, API clients to generate, or YAML whitespace headaches.
As your API specs change, Taxi queries automatically adapt.
// Send a query for data to Orbital,
// and it builds the integration on demand,
// using metadata embedded in your API specs
find { Movies(ReleaseYear > 2018)[] }
as {
// Consumers define the schema they want.
// Orbital works out where to fetch data from
title : MovieTitle // .. read from a db
review : ReviewScore // .. call a REST API to find this
awards : AwardTitle[] // ... and a gRPC service to find this.
}
Got another gnarly question? We'd love to hear it. Come and chat on Slack.