Portfolios API
Last updated: 2026-03-07
List Portfolios#
Retrieve a paginated list of your portfolios.
GET /api/v1/portfoliosQuery Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number |
per_page | integer | 20 | Items per page (max 100) |
status | string | — | Filter by status: draft, published, archived |
template | string | — | Filter by template type |
sort | string | updated_at | Sort field: created_at, updated_at, title |
order | string | desc | Sort order: asc, desc |
Example:
curl -H "X-API-Key: altx_sk_your_key_here" \
"https://api.altrixy.com/v1/portfolios?status=published&per_page=10"Response:
{
"data": [
{
"id": "ptf_abc123",
"title": "Redesigning Checkout at Stripe",
"template": "case_study",
"status": "published",
"slug": "checkout-redesign-stripe",
"quality_score": 87,
"created_at": "2026-03-01T10:00:00Z",
"updated_at": "2026-03-10T14:30:00Z",
"published_at": "2026-03-10T14:30:00Z",
"url": "https://altrixy.com/p/checkout-redesign-stripe"
}
],
"meta": {
"page": 1,
"per_page": 10,
"total": 3,
"total_pages": 1
}
}Create Portfolio#
Create a new portfolio and optionally trigger AI generation.
POST /api/v1/portfoliosRequest Body:
{
"title": "Launching Payments at Acme Corp",
"template": "product_launch",
"context": {
"role": "Senior Product Manager",
"company": "Acme Corp",
"time_period": "Q1-Q3 2025",
"situation": "Acme had no self-serve payment processing...",
"actions": "Led a cross-functional team of 12 to build...",
"results": "Processed $2M in first month, 40% conversion rate..."
},
"auto_generate": true
}Fields:
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Portfolio title |
template | string | Yes | One of: case_study, product_launch, impact_summary, full_portfolio, resume_enhancement, linkedin_summary |
context | object | No | Experience data for AI generation |
auto_generate | boolean | No | If true, AI generates content immediately (default: false) |
tone | string | No | One of: professional, conversational, technical, executive |
Response (201 Created):
{
"id": "ptf_def456",
"title": "Launching Payments at Acme Corp",
"template": "product_launch",
"status": "generating",
"quality_score": null,
"created_at": "2026-03-15T09:00:00Z",
"generation_status": {
"stage": "analyzing_context",
"progress": 20,
"estimated_completion": "2026-03-15T09:00:30Z"
}
}When `auto_generate` is true, the portfolio enters a `generating` status. Poll the GET endpoint or use webhooks to know when generation completes.
Get Portfolio#
Retrieve a single portfolio by ID, including all sections and metadata.
GET /api/v1/portfolios/:idExample:
curl -H "X-API-Key: altx_sk_your_key_here" \
https://api.altrixy.com/v1/portfolios/ptf_abc123Response:
{
"id": "ptf_abc123",
"title": "Redesigning Checkout at Stripe",
"template": "case_study",
"status": "published",
"slug": "checkout-redesign-stripe",
"quality_score": 87,
"tone": "professional",
"sections": [
{
"id": "sec_001",
"type": "overview",
"heading": "Overview",
"content": "Led the redesign of Stripe's checkout flow...",
"quality_score": 92,
"order": 1
},
{
"id": "sec_002",
"type": "problem",
"heading": "Problem Statement",
"content": "The existing checkout had a 34% drop-off rate...",
"quality_score": 85,
"order": 2
}
],
"created_at": "2026-03-01T10:00:00Z",
"updated_at": "2026-03-10T14:30:00Z",
"published_at": "2026-03-10T14:30:00Z",
"url": "https://altrixy.com/p/checkout-redesign-stripe",
"analytics": {
"views": 142,
"avg_time_on_page": 245,
"shares": 8
}
}Update Portfolio#
Update a portfolio's title, sections, tone, or status.
PUT /api/v1/portfolios/:idRequest Body (partial updates supported):
{
"title": "Updated Title",
"tone": "executive",
"sections": [
{
"id": "sec_001",
"heading": "Executive Summary",
"content": "Updated content here..."
}
]
}Example:
curl -X PUT \
-H "X-API-Key: altx_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{"title": "Checkout Redesign — Stripe Case Study"}' \
https://api.altrixy.com/v1/portfolios/ptf_abc123Response (200 OK): Returns the full updated portfolio object (same shape as GET response).
Updating sections by ID modifies existing sections in place. To add new sections, omit the `id` field. To remove sections, use the DELETE section endpoint.
Delete Portfolio#
Permanently delete a portfolio.
DELETE /api/v1/portfolios/:idExample:
curl -X DELETE \
-H "X-API-Key: altx_sk_your_key_here" \
https://api.altrixy.com/v1/portfolios/ptf_abc123Response (204 No Content): Empty response body on success.
Deletion is permanent and cannot be undone. Published portfolios will return a 404 page to anyone visiting the share URL. Consider archiving (`status: "archived"`) instead of deleting if you may need the content later.
Publish Portfolio#
Publish a draft portfolio to make it publicly accessible.
POST /api/v1/portfolios/:id/publishRequest Body (optional):
{
"slug": "custom-url-slug",
"visibility": "public",
"password": null,
"expires_at": null
}| Field | Type | Default | Description |
|---|---|---|---|
slug | string | auto-generated | Custom URL slug |
visibility | string | public | One of: public, password, expiring, private |
password | string | null | Required when visibility is password |
expires_at | string | null | ISO 8601 datetime. Required when visibility is expiring |
Example:
curl -X POST \
-H "X-API-Key: altx_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{"slug": "my-case-study", "visibility": "public"}' \
https://api.altrixy.com/v1/portfolios/ptf_abc123/publishResponse (200 OK):
{
"id": "ptf_abc123",
"status": "published",
"url": "https://altrixy.com/p/my-case-study",
"published_at": "2026-03-15T12:00:00Z",
"visibility": "public"
}