refinedev/refine · error · Error
Not implemented on refine-airtable data provider.
Error message
Not implemented on refine-airtable data provider.
What it means
`getApiUrl` is an optional method on the refine data provider contract; the Airtable provider does not use a single REST API URL (each table has its own endpoint), so it throws `Error("Not implemented on refine-airtable data provider.")` when called. Any code that assumes a REST base URL (auth providers, custom fetch code, `useCustom`-adjacent helpers) will hit this.
Source
Thrown at packages/airtable/src/dataProvider.ts:151
id,
...fields,
} as any,
};
},
deleteMany: async ({ resource, ids }) => {
const data = await base(resource).destroy(ids.map(String));
return {
data: data.map((p) => ({
id: p.id,
...p.fields,
})) as any,
};
},
getApiUrl: () => {
throw Error("Not implemented on refine-airtable data provider.");
},
custom: async () => {
throw Error("Not implemented on refine-airtable data provider.");
},
};
};
View on GitHub (pinned to 779d52a20e)
Solutions
- Remove or guard the getApiUrl call — build Airtable-specific URLs (https://api.airtable.com/v0/{baseId}/{table}) where needed
- If you need a REST-style API alongside Airtable, register a second data provider and route resources accordingly
- Wrap the call in a feature check: `typeof dp.getApiUrl === 'function'` before invoking
Example fix
// before
const apiUrl = dataProvider.getApiUrl();
// after
const apiUrl =
typeof dataProvider.getApiUrl === 'function'
? dataProvider.getApiUrl()
: `https://api.airtable.com/v0/${BASE_ID}`; Defensive patterns
Strategy: type-guard
Validate before calling
if (typeof dataProvider.getApiUrl !== 'function') {
// build the Airtable URL yourself
apiUrl = `https://api.airtable.com/v0/${baseId}`;
} Type guard
const supportsGetApiUrl = (dp: unknown): dp is { getApiUrl: () => string } =>
typeof (dp as any)?.getApiUrl === 'function'; Try / catch
try {
url = dataProvider.getApiUrl();
} catch {
url = `https://api.airtable.com/v0/${baseId}`;
} Prevention
- Feature-check optional provider methods before calling them
- Don't reuse REST-provider helpers (auth, uploads) with Airtable without adapters
When it happens
Trigger: Calling `dataRouterProvider.getApiUrl()` (directly or via a helper like an authProvider's check/login that builds URLs, or third-party code that reads getApiUrl) while the refine app uses `refine-airtable` as its dataProvider.
Common situations: Mixing a REST-style authProvider or file upload logic with the Airtable provider; copying examples written for the REST/strapi providers; libraries that call getApiUrl defensively but unconditionally.
Related errors
- 'getApiUrl' method is not implemented on refine-appwrite dat
- Operator ${operator} is not supported for the Airtable data
- 'custom' method is not implemented on refine-appwrite data p
- Not implemented custom on data provider.
- Not implemented custom on data provider.
AI-assisted analysis of refinedev/refine@779d52a20e (2026-08-27).
Data as JSON: /api/errors/f1aa7bba4d6238b7.
Report an issue: GitHub.