/integrations/ecosystems/{ecosystemId}/provider-configs/{providerId}integrationsUpsert an ecosystem's provider config
Replaces the non-secret config; a blank/absent clientSecret preserves the stored encrypted secret, a present one is encrypted at rest. The change invalidates the resolver cache so the ecosystem's new creds drive its flows immediately. The ecosystemId must be the caller's own ecosystem (403 otherwise).
Auth: bearerAuth — calls run as the authenticated user.
- ecosystemIdpathstring
- providerIdpathstring
application/json · optional
- clientIdoptionalstring
- scopesoptionalstring[]
- authUrloptionalstring
- tokenUrloptionalstring
- userinfoUrloptionalstring
- validateUrloptionalstring
- credentialStyleoptional"form_body" | "basic_auth"
- endpointsoptionalobject
- clientSecretoptionalstring
Blank/absent preserves the existing secret
- fieldsoptionalobject
api_key providers: the provider's configFields keyed by field key (the one secret is split into the encrypted slot; a blank/absent secret preserves the stored one).
- enabledoptionalboolean
api_key providers: false pauses the provider without deleting its secret.
{
"clientId": "string",
"scopes": [
"string"
],
"authUrl": "string",
"tokenUrl": "string",
"userinfoUrl": "string",
"validateUrl": "string",
"credentialStyle": "form_body",
"endpoints": {},
"clientSecret": "string",
"fields": {},
"enabled": true
}Masked provider config
- idstring
- ecosystemIdstring
Ecosystem id (the RLS owner)
- providerIdstring
- configobject
Non-secret config: clientId, scopes, URLs, endpoints, credentialStyle
- hasSecretboolean
Whether a client secret is stored (the value is never returned)
- updatedByoptionalstring?
- createdAtoptionalstring
- updatedAtoptionalstring
{
"id": "string",
"ecosystemId": "string",
"providerId": "string",
"config": {},
"hasSecret": true,
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}Problem Details (RFC 9457)
- typeoptionalstring
URI identifying the problem type; 'about:blank' when unspecified
- titlestring
Short, human-readable summary of the problem type
- statusinteger
HTTP status code, duplicated in the body
- detailoptionalstring
Explanation specific to this occurrence
- instanceoptionalstring
URI reference for this occurrence (the request path)
{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string"
}Problem Details (RFC 9457)
- typeoptionalstring
URI identifying the problem type; 'about:blank' when unspecified
- titlestring
Short, human-readable summary of the problem type
- statusinteger
HTTP status code, duplicated in the body
- detailoptionalstring
Explanation specific to this occurrence
- instanceoptionalstring
URI reference for this occurrence (the request path)
{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string"
}Problem Details (RFC 9457)
- typeoptionalstring
URI identifying the problem type; 'about:blank' when unspecified
- titlestring
Short, human-readable summary of the problem type
- statusinteger
HTTP status code, duplicated in the body
- detailoptionalstring
Explanation specific to this occurrence
- instanceoptionalstring
URI reference for this occurrence (the request path)
{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string"
}Problem Details (RFC 9457)
- typeoptionalstring
URI identifying the problem type; 'about:blank' when unspecified
- titlestring
Short, human-readable summary of the problem type
- statusinteger
HTTP status code, duplicated in the body
- detailoptionalstring
Explanation specific to this occurrence
- instanceoptionalstring
URI reference for this occurrence (the request path)
{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string"
}Problem Details (RFC 9457)
- typeoptionalstring
URI identifying the problem type; 'about:blank' when unspecified
- titlestring
Short, human-readable summary of the problem type
- statusinteger
HTTP status code, duplicated in the body
- detailoptionalstring
Explanation specific to this occurrence
- instanceoptionalstring
URI reference for this occurrence (the request path)
{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string"
}curl -X PUT "https://api.agenticdeveloperhub.com/integrations/ecosystems/{ecosystemId}/provider-configs/{providerId}" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"clientId": "string",
"scopes": [
"string"
],
"authUrl": "string",
"tokenUrl": "string",
"userinfoUrl": "string",
"validateUrl": "string",
"credentialStyle": "form_body",
"endpoints": {},
"clientSecret": "string",
"fields": {},
"enabled": true
}'const res = await fetch("https://api.agenticdeveloperhub.com/integrations/ecosystems/{ecosystemId}/provider-configs/{providerId}", {
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
body: "{\n \"clientId\": \"string\",\n \"scopes\": [\n \"string\"\n ],\n \"authUrl\": \"string\",\n \"tokenUrl\": \"string\",\n \"userinfoUrl\": \"string\",\n \"validateUrl\": \"string\",\n \"credentialStyle\": \"form_body\",\n \"endpoints\": {},\n \"clientSecret\": \"string\",\n \"fields\": {},\n \"enabled\": true\n}",
});
const data = await res.json();