{"openapi": "3.1.0", "info": {"title": "Sliq Public API", "version": "0.1.0", "description": "Sliq's public API \u2014 programmatic read access to your GTM data for CRM sync and coding agents. v1 exposes your outreach prospects, their cross-channel interaction history, and your agents (campaigns); more resources follow over time. Read-only, bearer-authenticated, cursor-paginated, and scoped to the key owner."}, "paths": {"/v1/people": {"get": {"operationId": "publicapi_api_list_people", "summary": "List People", "parameters": [{"in": "query", "name": "updated_since", "schema": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "ISO-8601 with a timezone offset; returns prospects updated at or after this instant.", "title": "Updated Since"}, "required": false, "description": "ISO-8601 with a timezone offset; returns prospects updated at or after this instant."}, {"in": "query", "name": "stage", "schema": {"anyOf": [{"enum": ["not_started", "queued", "contacted", "engaged", "replied", "interested", "meeting_booked", "finished", "not_reached", "already_connected"], "type": "string"}, {"type": "null"}], "description": "Filter to prospects in this lead-funnel bucket (the `stage` output value).", "title": "Stage"}, "required": false, "description": "Filter to prospects in this lead-funnel bucket (the `stage` output value)."}, {"in": "query", "name": "agent_id", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "Filter to prospects belonging to this agent (campaign) id.", "title": "Agent Id"}, "required": false, "description": "Filter to prospects belonging to this agent (campaign) id."}, {"in": "query", "name": "is_connected", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter to prospects with (true) or without (false) a LinkedIn connection.", "title": "Is Connected"}, "required": false, "description": "Filter to prospects with (true) or without (false) a LinkedIn connection."}, {"in": "query", "name": "has_replied", "schema": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Filter to prospects who have (true) or have not (false) replied on any channel.", "title": "Has Replied"}, "required": false, "description": "Filter to prospects who have (true) or have not (false) replied on any channel."}, {"in": "query", "name": "search", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Case-insensitive substring match on name or email.", "title": "Search"}, "required": false, "description": "Case-insensitive substring match on name or email."}, {"in": "query", "name": "page_size", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "Rows per page, 1\u2013100 (default 100).", "title": "Page Size"}, "required": false, "description": "Rows per page, 1\u2013100 (default 100)."}, {"in": "query", "name": "cursor", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Opaque cursor copied from a prior response's next_url; omit for the first page.", "title": "Cursor"}, "required": false, "description": "Opaque cursor copied from a prior response's next_url; omit for the first page."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedPersonOut"}}}}}, "description": "The owner's prospect book. Filters are row-local predicates; results are\ncursor-paginated on immutable `id`. Prospects of soft-deleted campaigns are\nexcluded.", "security": [{"ApiKeyAuth": []}]}}, "/v1/people/{person_id}": {"get": {"operationId": "publicapi_api_get_person", "summary": "Get Person", "parameters": [{"in": "path", "name": "person_id", "schema": {"title": "Person Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PersonOut"}}}}}, "description": "One prospect by id. A wrong-owner id (or a soft-deleted campaign's prospect)\n404s exactly like a missing one \u2014 the lookup is owner-scoped.", "security": [{"ApiKeyAuth": []}]}}, "/v1/people/{person_id}/interactions": {"get": {"operationId": "publicapi_api_get_interactions", "summary": "Get Interactions", "parameters": [{"in": "path", "name": "person_id", "schema": {"title": "Person Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/InteractionsOut"}}}}}, "description": "One person's merged LinkedIn + email timeline (deduped, ascending), truncated to the most recent 500 interactions \u2014 `has_more` flags truncation.", "security": [{"ApiKeyAuth": []}]}}, "/v1/agents": {"get": {"operationId": "publicapi_api_list_agents", "summary": "List Agents", "parameters": [{"in": "query", "name": "page_size", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "Rows per page, 1\u2013100 (default 100).", "title": "Page Size"}, "required": false, "description": "Rows per page, 1\u2013100 (default 100)."}, {"in": "query", "name": "cursor", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Opaque cursor copied from a prior response's next_url; omit for the first page.", "title": "Cursor"}, "required": false, "description": "Opaque cursor copied from a prior response's next_url; omit for the first page."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedAgentOut"}}}}}, "description": "The owner's agents (campaigns) \u2014 resolve the `agent_id` on each person to a\nname here. Soft-deleted campaigns are excluded; cursor-paginated on `id`.", "security": [{"ApiKeyAuth": []}]}}}, "components": {"schemas": {"Input": {"properties": {"page_size": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "Rows per page, 1\u2013100 (default 100).", "title": "Page Size"}, "cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Opaque cursor copied from a prior response's next_url; omit for the first page.", "title": "Cursor"}}, "title": "Input", "type": "object"}, "PagedPersonOut": {"properties": {"data": {"items": {"$ref": "#/components/schemas/PersonOut"}, "title": "Data", "type": "array"}, "next_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Url"}, "has_more": {"title": "Has More", "type": "boolean"}}, "required": ["data", "has_more"], "title": "PagedPersonOut", "type": "object"}, "PersonOut": {"properties": {"id": {"description": "Stable Sliq prospect id; the path segment for GET /people/{id}/interactions.", "title": "Id", "type": "integer"}, "name": {"title": "Name", "type": "string"}, "title": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Title"}, "company": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Company"}, "email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Email"}, "linkedin_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Linkedin Url"}, "channel": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Which channel(s) the prospect is enrolled on: 'linkedin', 'email', 'both', or null.", "title": "Channel"}, "agent_id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "Id of the Sliq agent (campaign) this prospect currently belongs to; resolve to a name via GET /agents. Null when the prospect is not in any campaign \u2014 e.g. a durable contact whose campaign was deleted.", "title": "Agent Id"}, "stage": {"description": "Lead-funnel bucket \u2014 the furthest-advanced state across both channels. Filterable via the `stage` query param on GET /people.", "enum": ["not_started", "queued", "contacted", "engaged", "replied", "interested", "meeting_booked", "finished", "not_reached", "already_connected"], "title": "Stage", "type": "string"}, "is_connected": {"description": "Whether a LinkedIn connection exists \u2014 including a pre-existing 1st-degree connection that `stage` parks outside the earned funnel. Orthogonal to `stage`.", "title": "Is Connected", "type": "boolean"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["id", "name", "stage", "is_connected", "created_at", "updated_at"], "title": "PersonOut", "type": "object"}, "InteractionOut": {"properties": {"at": {"description": "ISO-8601 timestamp of the interaction.", "title": "At", "type": "string"}, "channel": {"description": "'linkedin' or 'email'.", "title": "Channel", "type": "string"}, "direction": {"description": "'outbound' (from the account owner) or 'inbound' (from the prospect).", "title": "Direction", "type": "string"}, "type": {"description": "'message' for ordinary messages, else a kind like 'reaction' or 'connection_request_sent'.", "title": "Type", "type": "string"}, "text": {"title": "Text", "type": "string"}, "subject": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Subject"}}, "required": ["at", "channel", "direction", "type", "text"], "title": "InteractionOut", "type": "object"}, "InteractionsOut": {"properties": {"data": {"items": {"$ref": "#/components/schemas/InteractionOut"}, "title": "Data", "type": "array"}, "has_more": {"description": "True when older interactions were truncated \u2014 the timeline returns the most recent events up to a fixed cap. The returned events are still ascending.", "title": "Has More", "type": "boolean"}}, "required": ["data", "has_more"], "title": "InteractionsOut", "type": "object"}, "AgentOut": {"properties": {"id": {"description": "Stable Sliq agent (campaign) id; the value `agent_id` carries on each person.", "title": "Id", "type": "integer"}, "name": {"description": "Campaign name.", "title": "Name", "type": "string"}, "status": {"description": "Lifecycle status: 'active', 'running', 'paused', or 'completed'.", "title": "Status", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["id", "name", "status", "created_at", "updated_at"], "title": "AgentOut", "type": "object"}, "PagedAgentOut": {"properties": {"data": {"items": {"$ref": "#/components/schemas/AgentOut"}, "title": "Data", "type": "array"}, "next_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Url"}, "has_more": {"title": "Has More", "type": "boolean"}}, "required": ["data", "has_more"], "title": "PagedAgentOut", "type": "object"}}, "securitySchemes": {"ApiKeyAuth": {"type": "http", "scheme": "bearer"}}}, "servers": []}