Overview
PUT/integrations/ecosystems/{ecosystemId}/provider-configs/{providerId}integrations

Upsert 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.

Parameters
  • ecosystemIdpathstring
  • providerIdpathstring
Request body

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.

Example
{
  "clientId": "string",
  "scopes": [
    "string"
  ],
  "authUrl": "string",
  "tokenUrl": "string",
  "userinfoUrl": "string",
  "validateUrl": "string",
  "credentialStyle": "form_body",
  "endpoints": {},
  "clientSecret": "string",
  "fields": {},
  "enabled": true
}
Responses
200

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
Example
{
  "id": "string",
  "ecosystemId": "string",
  "providerId": "string",
  "config": {},
  "hasSecret": true,
  "updatedBy": "string",
  "createdAt": "string",
  "updatedAt": "string"
}
400

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)

Example
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string"
}
401

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)

Example
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string"
}
403

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)

Example
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string"
}
404

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)

Example
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string"
}
503

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)

Example
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string"
}
Code examples
cURL
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
}'
JavaScript
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();