---
updatedAt: 2026-06-25T05:57:40.000Z
agentTools:
  projectIndex: https://docs.delivr.ai/llms.txt
---

# List project users

Retrieve a list of users within the specified project. Name the target project in the request (a `project_id` field for writes, or a `?project_id=` query parameter for reads).

# OpenAPI definition

```json
{
  "openapi": "3.0.3",
  "info": {
    "title": "Platform Management",
    "version": "2.0.0",
    "description": "Manage your organization's **projects**, **pixels**, and **members**.\n\nAuthenticate with your organization API key (`X-Api-Key` + `X-Api-Secret`, the same key used for the data APIs). The key's organization is resolved from the key itself, so a project-scoped call names its target project in the request: a `project_id` field for writes, or a `?project_id=` query parameter for reads. A project outside the key's organization is rejected.\n\nYour organization itself is read, updated, and deleted under Account. Organizations are created by Delivr.\n\n**Base URL:** `https://api.delivr.ai`\n"
  },
  "servers": [
    {
      "url": "https://api.delivr.ai",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Project User",
      "description": "Manage users within a project"
    }
  ],
  "paths": {
    "/api/v1/project/user/get": {
      "get": {
        "operationId": "listProjectUsers",
        "tags": [
          "Project User"
        ],
        "summary": "List project users",
        "description": "Retrieve a list of users within the specified project. Name the target project in the request (a `project_id` field for writes, or a `?project_id=` query parameter for reads).",
        "parameters": [
          {
            "$ref": "#/components/parameters/projectIdQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of users",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/UnauthorizedGateway"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "ApiKeyAuth": [],
            "ApiSecretAuth": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Api-Key",
        "description": "Organization API key (`dlvr_` prefixed), created in the dashboard at `https://app.delivr.ai/{org_id}/settings/api-keys`. Must be paired with the `X-Api-Secret` header."
      },
      "ApiSecretAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Api-Secret",
        "description": "Secret half of the organization API key, paired with `X-Api-Key`. Both headers are required on every request."
      }
    },
    "parameters": {
      "projectIdQuery": {
        "name": "project_id",
        "in": "query",
        "required": true,
        "description": "Target project (org-key path). The project must belong to the key's organization.",
        "schema": {
          "type": "string"
        }
      }
    },
    "schemas": {
      "UserListItem": {
        "type": "object",
        "properties": {
          "user_id": {
            "type": "string"
          },
          "first_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "UserListResponse": {
        "type": "object",
        "required": [
          "response"
        ],
        "properties": {
          "response": {
            "type": "object",
            "required": [
              "users"
            ],
            "properties": {
              "users": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UserListItem"
                }
              }
            }
          }
        }
      },
      "Error": {
        "type": "object",
        "description": "The shape every failure this service returns. `type` selects the status: `invalid_request` is 400, `unauthorized` 401, `not_found` 404, `internal_error` 500. `help_url` is always present and is the empty string when no page applies.",
        "required": [
          "type",
          "code",
          "message",
          "help_url",
          "request_id"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "invalid_request",
              "unauthorized",
              "not_found",
              "internal_error"
            ],
            "description": "Failure class. Stable; switch on this rather than on the status line."
          },
          "code": {
            "type": "string",
            "description": "Specific reason within the class, for programmatic handling."
          },
          "message": {
            "type": "string",
            "description": "Human-readable explanation. Wording may change; do not match on it."
          },
          "help_url": {
            "type": "string",
            "description": "Documentation for this failure when one applies, empty otherwise."
          },
          "request_id": {
            "type": "string",
            "description": "Identifier for this request. Quote it when reporting a problem: it is how a failure gets traced."
          },
          "fields": {
            "type": "array",
            "description": "Per-field validation detail. Present only on an `invalid_request` raised by body validation, absent otherwise.",
            "items": {
              "type": "object",
              "properties": {
                "field": {
                  "type": "string"
                },
                "constraint": {
                  "type": "string"
                },
                "allowed": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "GatewayError": {
        "type": "object",
        "description": "Refusal from the API gateway, which answers before the request reaches the service. A different shape from `Error`, and the only body a rejected key produces.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "What was wrong with the credentials.",
            "example": "API key is required"
          }
        }
      }
    },
    "responses": {
      "NotFound": {
        "description": "The named record does not exist, or lies outside the caller's organization.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "InternalError": {
        "description": "Unexpected server error.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "UnauthorizedGateway": {
        "description": "Missing, malformed, or rejected API key. Refused by the gateway, so the body is `{\"error\": \"...\"}` rather than the `Error` envelope every other failure on this operation uses.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GatewayError"
            }
          }
        }
      }
    }
  }
}
```