Skip to content

Start building

Jump toAI providers
All endpoints

AI providers

Your own model provider keys: add, test, list their models and rotate them.

get/v1/llm_keys

List keys

Needs llm_key.manage

Every key of this organization: at most one per route, so never paged.

Response200

  • objectstring
    list
  • dataLlmKey[]
    20 fields
    • idstring
    • objectstring
      llm_key
    • auth_kindstring
    • configobject

      Any JSON object.

    • created_atstring
    • has_secretboolean
    • healthstring
      One ofhealthyunhealthy
    • health_checked_atstring or null
    • health_reasonstring or null
    • labelstring
    • providerstring
    • routestring
    • route_namestring
    • row_versioninteger
    • secret_hintstring or null
    • share_with_childrenboolean
    • statusstring
      One ofpending_testactivedisabled
    • updated_atstring
    • created_byActorRef or null

      Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

      5 fields
      • idstring or null
      • kindstring
        One ofuserapi_keyservice_accountworkloadend_usersystem
      • namestring or null
      • avatar_versionstring or null
      • emailstring or null
    • updated_byActorRef or null

      Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

      5 fields
      • idstring or null
      • kindstring
        One ofuserapi_keyservice_accountworkloadend_usersystem
      • namestring or null
      • avatar_versionstring or null
      • emailstring or null
  • has_moreboolean
  • next_cursorstring or null
  • facetsmap<string, map<string, integer>> or null
  • peoplemap<string, ActorRef> or null
    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • total_countinteger or null
  • total_count_exactboolean or null

Status codes

  • 200Successful Response
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl "https://api.mydeepagents.com/v1/llm_keys" \
  -H "Authorization: Bearer $MDA_API_KEY"
Response · 200
JSON
{
  "object": "list",
  "data": [
    {
      "id": "lmk_01jczrgrhc1c31x5whchagjvzx",
      "object": "llm_key",
      "auth_kind": "auth kind",
      "config": {},
      "created_at": "2026-11-10T09:30:00.000Z",
      "created_by": {
        "kind": "user",
        "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
        "name": "Ada Lovelace",
        "email": "ada@example.com"
      },
      "has_secret": true,
      "health": "healthy",
      "health_checked_at": "2026-11-10T09:30:00.000Z",
      "health_reason": null,
      "label": "label",
      "provider": "anthropic",
      "route": "route",
      "route_name": "route name",
      "row_version": 4,
      "secret_hint": "secret hint",
      "share_with_children": true,
      "status": "pending_test",
      "updated_at": "2026-11-10T09:30:00.000Z",
      "updated_by": {
        "kind": "user",
        "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
        "name": "Ada Lovelace",
        "email": "ada@example.com"
      }
    }
  ],
  "has_more": false,
  "next_cursor": null,
  "total_count": 1
}
post/v1/llm_keys

Create key

Needs llm_key.manage

Request bodyLlmKeyCreate

  • routestringRequired
    at least 1 charactersat most 40 characters
  • auth_kindstring or null
    One ofapi_keyaws_keysaws_rolegcp_wifazure_federatednone
  • configmap<string, string>
  • labelstring
    Default""at most 200 characters
  • secretstring or null
    at most 20000 characters
  • share_with_childrenboolean
    Defaultfalse

Response201

  • idstring
  • objectstring
    llm_key
  • auth_kindstring
  • configobject

    Any JSON object.

  • created_atstring
  • has_secretboolean
  • healthstring
    One ofhealthyunhealthy
  • health_checked_atstring or null
  • health_reasonstring or null
  • labelstring
  • providerstring
  • routestring
  • route_namestring
  • row_versioninteger
  • secret_hintstring or null
  • share_with_childrenboolean
  • statusstring
    One ofpending_testactivedisabled
  • updated_atstring
  • created_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • updated_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null

Status codes

  • 201Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X POST "https://api.mydeepagents.com/v1/llm_keys" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "auth_kind": "api_key",
    "config": {
      "key": "key"
    },
    "label": "",
    "route": "route",
    "secret": "secret",
    "share_with_children": false
  }'
Response · 201
JSON
{
  "id": "lmk_01jczrgrhc1c31x5whchagjvzx",
  "object": "llm_key",
  "auth_kind": "auth kind",
  "config": {},
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "has_secret": true,
  "health": "healthy",
  "health_checked_at": "2026-11-10T09:30:00.000Z",
  "health_reason": null,
  "label": "label",
  "provider": "anthropic",
  "route": "route",
  "route_name": "route name",
  "row_version": 4,
  "secret_hint": "secret hint",
  "share_with_children": true,
  "status": "pending_test",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  }
}
get/v1/llm_keys/{llm_key_id}

Get key

Needs llm_key.manage

Path parameters

  • llm_key_idstringRequired

Response200

  • idstring
  • objectstring
    llm_key
  • auth_kindstring
  • configobject

    Any JSON object.

  • created_atstring
  • has_secretboolean
  • healthstring
    One ofhealthyunhealthy
  • health_checked_atstring or null
  • health_reasonstring or null
  • labelstring
  • providerstring
  • routestring
  • route_namestring
  • row_versioninteger
  • secret_hintstring or null
  • share_with_childrenboolean
  • statusstring
    One ofpending_testactivedisabled
  • updated_atstring
  • created_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • updated_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl "https://api.mydeepagents.com/v1/llm_keys/lmk_01jczrgrhc1c31x5whchagjvzx" \
  -H "Authorization: Bearer $MDA_API_KEY"
Response · 200
JSON
{
  "id": "lmk_01jczrgrhc1c31x5whchagjvzx",
  "object": "llm_key",
  "auth_kind": "auth kind",
  "config": {},
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "has_secret": true,
  "health": "healthy",
  "health_checked_at": "2026-11-10T09:30:00.000Z",
  "health_reason": null,
  "label": "label",
  "provider": "anthropic",
  "route": "route",
  "route_name": "route name",
  "row_version": 4,
  "secret_hint": "secret hint",
  "share_with_children": true,
  "status": "pending_test",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  }
}
patch/v1/llm_keys/{llm_key_id}

Patch key

Needs llm_key.manage

Path parameters

  • llm_key_idstringRequired

Headers

  • If-Matchstring

    The ETag you read. If the resource changed since, the write fails with 412.

Request bodyLlmKeyPatch

  • labelstring or null
    at most 200 characters
  • share_with_childrenboolean or null
  • statusstring or null
    One ofactivedisabled

Response200

  • idstring
  • objectstring
    llm_key
  • auth_kindstring
  • configobject

    Any JSON object.

  • created_atstring
  • has_secretboolean
  • healthstring
    One ofhealthyunhealthy
  • health_checked_atstring or null
  • health_reasonstring or null
  • labelstring
  • providerstring
  • routestring
  • route_namestring
  • row_versioninteger
  • secret_hintstring or null
  • share_with_childrenboolean
  • statusstring
    One ofpending_testactivedisabled
  • updated_atstring
  • created_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • updated_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X PATCH "https://api.mydeepagents.com/v1/llm_keys/lmk_01jczrgrhc1c31x5whchagjvzx" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "label": "label",
    "share_with_children": true,
    "status": "active"
  }'
Response · 200
JSON
{
  "id": "lmk_01jczrgrhc1c31x5whchagjvzx",
  "object": "llm_key",
  "auth_kind": "auth kind",
  "config": {},
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "has_secret": true,
  "health": "healthy",
  "health_checked_at": "2026-11-10T09:30:00.000Z",
  "health_reason": null,
  "label": "label",
  "provider": "anthropic",
  "route": "route",
  "route_name": "route name",
  "row_version": 4,
  "secret_hint": "secret hint",
  "share_with_children": true,
  "status": "pending_test",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  }
}
delete/v1/llm_keys/{llm_key_id}

Delete key

Needs llm_key.manage

Path parameters

  • llm_key_idstringRequired

Response204

Answers 204 with no body.

Status codes

  • 204Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X DELETE "https://api.mydeepagents.com/v1/llm_keys/lmk_01jczrgrhc1c31x5whchagjvzx" \
  -H "Authorization: Bearer $MDA_API_KEY"
get/v1/llm_keys/{llm_key_id}/models

Key models

Needs llm_key.manage

Path parameters

  • llm_key_idstringRequired

Response200

  • objectstring
    list
  • dataLlmKeyModel[]
    4 fields
    • idstring
    • cataloguedboolean
    • display_namestring
    • capabilitiesstring[] or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl "https://api.mydeepagents.com/v1/llm_keys/lmk_01jczrgrhc1c31x5whchagjvzx/models" \
  -H "Authorization: Bearer $MDA_API_KEY"
Response · 200
JSON
{
  "object": "list",
  "data": [
    {
      "id": "id",
      "capabilities": [
        "tools"
      ],
      "catalogued": true,
      "display_name": "Ada Lovelace"
    }
  ]
}
post/v1/llm_keys/{llm_key_id}/secret

Replace secret

Needs llm_key.manage

Path parameters

  • llm_key_idstringRequired

Request bodyLlmKeySecret

  • secretstringRequired
    at least 1 charactersat most 20000 characters
  • configmap<string, string>

Response200

  • idstring
  • objectstring
    llm_key
  • auth_kindstring
  • configobject

    Any JSON object.

  • created_atstring
  • has_secretboolean
  • healthstring
    One ofhealthyunhealthy
  • health_checked_atstring or null
  • health_reasonstring or null
  • labelstring
  • providerstring
  • routestring
  • route_namestring
  • row_versioninteger
  • secret_hintstring or null
  • share_with_childrenboolean
  • statusstring
    One ofpending_testactivedisabled
  • updated_atstring
  • created_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null
  • updated_byActorRef or null

    Who created or last changed something, resolved to a name for display. system, workload (an automation) and end_user (a widget visitor) have no ID or name: the console words them. name is null for someone the directory no longer knows. id is what the lists' created_by/updated_by filters take. avatar_version is set for a person with a photo: it is at GET /v1/members/{id}/avatar?v=<avatar_version> while they are a member.

    5 fields
    • idstring or null
    • kindstring
      One ofuserapi_keyservice_accountworkloadend_usersystem
    • namestring or null
    • avatar_versionstring or null
    • emailstring or null

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X POST "https://api.mydeepagents.com/v1/llm_keys/lmk_01jczrgrhc1c31x5whchagjvzx/secret" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "config": {
      "key": "key"
    },
    "secret": "secret"
  }'
Response · 200
JSON
{
  "id": "lmk_01jczrgrhc1c31x5whchagjvzx",
  "object": "llm_key",
  "auth_kind": "auth kind",
  "config": {},
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "has_secret": true,
  "health": "healthy",
  "health_checked_at": "2026-11-10T09:30:00.000Z",
  "health_reason": null,
  "label": "label",
  "provider": "anthropic",
  "route": "route",
  "route_name": "route name",
  "row_version": 4,
  "secret_hint": "secret hint",
  "share_with_children": true,
  "status": "pending_test",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  }
}
post/v1/llm_keys/{llm_key_id}/test

Test key

Needs llm_key.manage

Path parameters

  • llm_key_idstringRequired

Response200

  • objectstring
    llm_key_test
  • codestring or null
  • healthstring
    One ofhealthyunhealthy
  • key_idstring
  • messagestring or null
  • okboolean

Status codes

  • 200Successful Response
  • 422The request is not valid: errors[] names each field.
  • 4XXThe request was refused: the problem says why.
  • 5XXThe API could not answer: the problem says why.
Request
curl -X POST "https://api.mydeepagents.com/v1/llm_keys/lmk_01jczrgrhc1c31x5whchagjvzx/test" \
  -H "Authorization: Bearer $MDA_API_KEY"
Response · 200
JSON
{
  "object": "llm_key_test",
  "code": "code",
  "health": "healthy",
  "key_id": "k7m2p9qa3tq8v1zc",
  "message": "Summarise today's open tickets.",
  "ok": true
}

Build with us

Ready for your first call?

Early access is open. Tell us what you want your agents to do, and we will help you get your first key.