GraphQL API
ProjectCore exposes a read-only GraphQL API at POST /graphql for system-to-system integrations. Every query is scoped to the tenant that owns the bearer token used to authenticate the request.
Authentication
The API is authenticated with a tenant-wide GraphQL API bearer token, managed from Tenant Admin → Tokens. Send it in the Authorization header:
Authorization: Bearer <your-tenant-api-token>
Unlike the MCP server (which authenticates as a specific user), the GraphQL API acts tenant-wide. Resolvers scope directly through the resolved tenant rather than through Pundit user policies.
Limits
Maximum nesting depth per query.
Maximum query complexity score.
Queries
project(key: String!): Project
Look up a project by its key (e.g. "ACME").
projects: [Project!]!
All projects in this tenant.
issue(key: String!): Issue
Look up an issue by its full key (e.g. "ACME-42").
issues(project_key: String!, assignee_email: String, status: String, limit: Int): [Issue!]!
Issues in a project, optionally filtered by assignee or status.
- •project_key (required) — e.g. "ACME"
- •assignee_email (optional) — "unassigned" for no assignee
- •status (optional) — board column/status name
- •limit (optional) — default 50, max 200
Types
- id: ID!
- key: String!
- name: String!
- totalTimeSpentSeconds: Int!
- totalTimeSpentFormatted: String!
- issues(assignee_email, status, limit): [Issue!]!
- fullKey: String!
- title: String
- issueType: String!
- status: String
- priority: String
- storyPoints: Float
- assignee: User
- reporter: User
- epic: Issue
- parent: Issue
- startDate: ISO8601Date
- dueDate: ISO8601Date
- totalTimeSpentSeconds: Int!
- totalTimeSpentFormatted: String!
- createdAt: ISO8601DateTime!
- updatedAt: ISO8601DateTime!
- id: ID!
- email: String!
- displayName: String!
Example Query
Fetch all issues in a project with their assignees and status:
curl -X POST https://your-workspace.example.com/graphql \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "{ issues(projectKey: \"ACME\") { fullKey title status assignee { displayName } priority storyPoints } }"
}'
Interactive Explorer
An interactive GraphiQL IDE is available at /graphiql for exploring the schema and testing queries. Sign in first — your session authenticates automatically.