Skip to main content
Once your basic integration is working, these advanced API patterns help you handle large datasets efficiently, reduce unnecessary network overhead, and perform high-volume operations in fewer round-trips. This guide covers cursor-based pagination, field and metadata filtering, sorting, bulk operations, and practical tips for squeezing the most performance out of your integration.

Pagination

The Jomioz API uses cursor-based pagination for all list endpoints. Unlike offset-based pagination, cursor-based pagination stays consistent even when new records are inserted between pages — making it the right choice for real-time or frequently updated datasets.

Query Parameters

Example

The response includes a pagination object. When next_cursor is null, you have reached the last page.
Pass next_cursor as the cursor parameter in your next request to retrieve the following page. Continue until next_cursor is null.

Filtering Resources

Narrow list results by appending filter parameters to the query string. Filters are additive — all supplied conditions must match (logical AND).

Common Filter Parameters

Example

Sorting

Control the order of list results with the sort and order parameters.

Example

Combine sorting with filtering and pagination in a single request — all query parameters work together.

Bulk Operations

Use the bulk endpoint to create, update, or delete multiple resources in a single HTTP request. This reduces latency and helps you stay within rate limits (1,000 req/min on Standard; 5,000 req/min on Enterprise) when processing large datasets. Send a POST request to /api/resources/bulk with a JSON array in the body. Each element follows the same schema as the single-resource POST /api/resources endpoint.

Example — Bulk Create

The response contains a results array where each element corresponds to the input item at the same index. Individual items that fail validation return an error object rather than a resource object — the rest of the batch still succeeds.
The bulk endpoint accepts a maximum of 200 items per request. If your payload exceeds this limit, split it into multiple requests and process them sequentially or in parallel, respecting your plan’s rate limit.

Metadata Filtering

Every resource supports a free-form metadata object that you can use to store arbitrary key-value pairs. Filter resources by metadata values using bracket notation in query parameters.

Example

You can combine metadata filters with any other filter, sort, or pagination parameter in the same request.
Metadata values are indexed as strings. Numeric comparisons (greater than, less than) are not supported through the metadata filter interface. If you need range queries, store those values as top-level resource fields instead.

Performance Tips

Request only the fields your application needs by appending ?fields=id,name,status to any list or get request. Sparse fieldsets reduce payload size, lower serialisation overhead on both sides, and make your integration more resilient to future additions to the resource schema.
Additional performance recommendations:
  • Maximise page size. Set limit=200 when you need to fetch a full dataset — fewer HTTP round-trips means faster total execution time.
  • Cache stable data. Resource objects that do not change frequently (for example, type and metadata) can be cached locally and refreshed periodically rather than fetched on every request.
  • Use webhooks instead of polling. Subscribe to relevant event types via webhook to receive instant notifications instead of repeatedly calling list endpoints.
  • Parallelise independent requests. If your workflow requires data from multiple unrelated endpoints, issue the requests concurrently rather than sequentially.
  • Upgrade to Enterprise for higher rate limits. Standard accounts are capped at 1,000 req/min; Enterprise accounts have a 5,000 req/min limit, which is essential for high-volume ingestion pipelines.