Skip to content

Start building

Jump toMembers and invitations
All endpoints

Members and invitations

The people in your organization and the invitations waiting for them.

get/v1/invitations

List invitations

Needs member.manage

Sorts by created_at (default, newest first), email, role and expires_at; q searches addresses. Filters, each repeatable: status, role and created_by (who sent it, usr_…), plus the created time range; facets count each of them.

Query parameters

  • statusstring[]
  • rolestring[]
  • created_bystring[]
  • limitinteger

    Rows per page, 1 to 200. Omitted: every row.

    at least 1at most 200
  • cursorstring
  • qstring

    Search: rows whose name (or the list's other searchable text) contains this, any case.

    at most 200 characters
  • orderstring

    Sort field; a leading - sorts down. Each list names the fields it sorts by.

    at most 64 charactersmatches ^-?[a-z_]+$
  • includestring[]

    total_count (counted up to 10,000) and facets (a count per filter value).

    One oftotal_countfacets
  • created_afterstring

    Only rows created at or after this time (RFC 3339).

    date-time
  • created_beforestring

    Only rows created at or before this time (RFC 3339).

    date-time
  • updated_afterstring

    Only rows last changed at or after this time (RFC 3339).

    date-time
  • updated_beforestring

    Only rows last changed at or before this time (RFC 3339).

    date-time

Response200

  • objectstring
    list
  • dataInvitation[]
    9 fields
    • idstring
    • objectstring
      invitation
    • created_atstring
    • emailstring
    • expires_atstring
    • invited_bystring
    • rolestring
      One ofowneradminbuilderoperatorviewerguest
    • statusstring
      One ofpendingacceptedrevokedexpired
    • 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
  • 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
  • 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/invitations?limit=20" \
  -H "Authorization: Bearer $MDA_API_KEY"
Response · 200
JSON
{
  "object": "list",
  "data": [
    {
      "id": "inv_01jc2m6d0r3ecxqezg0f2q1r5s",
      "object": "invitation",
      "created_at": "2026-11-10T09:30:00.000Z",
      "created_by": {
        "kind": "user",
        "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
        "name": "Ada Lovelace",
        "email": "ada@example.com"
      },
      "email": "ada@example.com",
      "expires_at": "2026-11-10T09:30:00.000Z",
      "invited_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "role": "owner",
      "status": "pending"
    }
  ],
  "has_more": false,
  "next_cursor": null,
  "total_count": 1
}
post/v1/invitations

Create invitation

Needs member.manage

Request bodyInvitationCreate

  • emailstringRequired
    at most 320 charactersmatches ^[^@\s]+@[^@\s]+\.[^@\s]+$
  • rolestringRequired
    One ofowneradminbuilderoperatorviewerguest

Response201

  • idstring
  • objectstring
    invitation
  • created_atstring
  • emailstring
  • expires_atstring
  • invited_bystring
  • link_pathstring
  • rolestring
    One ofowneradminbuilderoperatorviewerguest
  • statusstring
    One ofpendingacceptedrevokedexpired
  • tokenstring
  • 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

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/invitations" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "ada@example.com",
    "role": "owner"
  }'
Response · 201
JSON
{
  "id": "inv_01jc2m6d0r3ecxqezg0f2q1r5s",
  "object": "invitation",
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "email": "ada@example.com",
  "expires_at": "2026-11-10T09:30:00.000Z",
  "invited_by": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
  "link_path": "link path",
  "role": "owner",
  "status": "pending",
  "token": "••••••••"
}
get/v1/members

List members

Any key of this organization

Sorts by name (default), email, role (owner first), status, created_at (when the person was added) and updated_at; q searches names and email addresses. Filters, each repeatable: role, status, max_data_class, created_by (who added them) and updated_by (usr_… or sa_…), plus the created and updated time ranges; facets count each of them.

Query parameters

  • rolestring[]
  • statusstring[]
  • max_data_classstring[]
  • created_bystring[]
  • updated_bystring[]
  • limitinteger

    Rows per page, 1 to 200. Omitted: every row.

    at least 1at most 200
  • cursorstring
  • qstring

    Search: rows whose name (or the list's other searchable text) contains this, any case.

    at most 200 characters
  • orderstring

    Sort field; a leading - sorts down. Each list names the fields it sorts by.

    at most 64 charactersmatches ^-?[a-z_]+$
  • includestring[]

    total_count (counted up to 10,000) and facets (a count per filter value).

    One oftotal_countfacets
  • created_afterstring

    Only rows created at or after this time (RFC 3339).

    date-time
  • created_beforestring

    Only rows created at or before this time (RFC 3339).

    date-time
  • updated_afterstring

    Only rows last changed at or after this time (RFC 3339).

    date-time
  • updated_beforestring

    Only rows last changed at or before this time (RFC 3339).

    date-time

Response200

  • objectstring
    list
  • dataMember[]
    13 fields
    • idstring
    • objectstring
      member
    • display_namestring or null
    • emailstring or null
    • max_data_classstring
      One ofpublicinternalpiisensitivephi
    • rolestring
      One ofowneradminbuilderoperatorviewerguest
    • row_versioninteger
    • statusstring
      One ofactivesuspended
    • avatar_versionstring or null
    • created_atstring or null
    • 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_atstring 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
  • 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/members?limit=20" \
  -H "Authorization: Bearer $MDA_API_KEY"
Response · 200
JSON
{
  "object": "list",
  "data": [
    {
      "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
      "object": "member",
      "avatar_version": "avatar version",
      "created_at": "2026-11-10T09:30:00.000Z",
      "created_by": {
        "kind": "user",
        "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
        "name": "Ada Lovelace",
        "email": "ada@example.com"
      },
      "display_name": "Ada Lovelace",
      "email": "ada@example.com",
      "max_data_class": "public",
      "role": "owner",
      "row_version": 4,
      "status": "active",
      "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/members

Add member

Needs member.manage

Request bodyMemberCreate

  • rolestringRequired
    One ofowneradminbuilderoperatorviewerguest
  • user_idstringRequired

Response201

  • idstring
  • objectstring
    member
  • display_namestring or null
  • emailstring or null
  • max_data_classstring
    One ofpublicinternalpiisensitivephi
  • rolestring
    One ofowneradminbuilderoperatorviewerguest
  • row_versioninteger
  • statusstring
    One ofactivesuspended
  • avatar_versionstring or null
  • created_atstring or null
  • 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_atstring 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/members" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "owner",
    "user_id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn"
  }'
Response · 201
JSON
{
  "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
  "object": "member",
  "avatar_version": "avatar version",
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "display_name": "Ada Lovelace",
  "email": "ada@example.com",
  "max_data_class": "public",
  "role": "owner",
  "row_version": 4,
  "status": "active",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  }
}
delete/v1/invitations/{invitation_id}

Revoke invitation

Needs member.manage

Path parameters

  • invitation_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/invitations/inv_01jc2m6d0r3ecxqezg0f2q1r5s" \
  -H "Authorization: Bearer $MDA_API_KEY"
patch/v1/members/{user_id}

Patch member

Needs member.manage

Path parameters

  • user_idstringRequired

Headers

  • If-Matchstring

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

Request bodyMemberPatch

  • rolestring or null
    One ofowneradminbuilderoperatorviewerguest
  • statusstring or null
    One ofactivesuspended

Response200

  • idstring
  • objectstring
    member
  • display_namestring or null
  • emailstring or null
  • max_data_classstring
    One ofpublicinternalpiisensitivephi
  • rolestring
    One ofowneradminbuilderoperatorviewerguest
  • row_versioninteger
  • statusstring
    One ofactivesuspended
  • avatar_versionstring or null
  • created_atstring or null
  • 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_atstring 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/members/usr_01jcf1j9wjxfrnhqda3mq7ejxn" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "owner",
    "status": "active"
  }'
Response · 200
JSON
{
  "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
  "object": "member",
  "avatar_version": "avatar version",
  "created_at": "2026-11-10T09:30:00.000Z",
  "created_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  },
  "display_name": "Ada Lovelace",
  "email": "ada@example.com",
  "max_data_class": "public",
  "role": "owner",
  "row_version": 4,
  "status": "active",
  "updated_at": "2026-11-10T09:30:00.000Z",
  "updated_by": {
    "kind": "user",
    "id": "usr_01jcf1j9wjxfrnhqda3mq7ejxn",
    "name": "Ada Lovelace",
    "email": "ada@example.com"
  }
}
delete/v1/members/{user_id}

Remove member

Needs member.manage

Path parameters

  • user_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/members/usr_01jcf1j9wjxfrnhqda3mq7ejxn" \
  -H "Authorization: Bearer $MDA_API_KEY"
get/v1/members/{user_id}/avatar

Get member avatar

Any key of this organization

The photo of a member of the organization in X-Tenant-Id, for the names on its lists (an ActorRef or a member with an avatar_version). Not found for someone who is not a member here, or who has no photo.

Path parameters

  • user_idstringRequired

Query parameters

  • vstring

    A cache-busting version (avatar_version); ignored.

    at most 64 characters

Response200

Answers with a file (image/webp).

Status codes

  • 200The member's photo as stored, with its sandboxing headers.
  • 304Not modified: If-None-Match named the current ETag.
  • 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/members/usr_01jcf1j9wjxfrnhqda3mq7ejxn/avatar" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -o image.webp

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.