Developers
Shipfolio REST API
Read your own listings and stacks from scripts, dashboards or your own site. JSON over HTTPS, with an API key from Company Pro.
Authentication
Send your API key as a Bearer token on every request. Keys are part of Company Pro.
Create a key under Settings, API keys. It's shown once, so store it right away. A key belongs to you and works while you're on a company with Company Pro; it stops working if you leave the plan or your account is suspended.
Keep keys on a server or in an environment variable. Anyone with your key can read your private listings. Revoke a key in Settings and make a new one if it leaks.
Authorization: Bearer sfk_… export SHIPFOLIO_API_KEY="sfk_…" Base URL and format
- Requests are GET over HTTPS. Responses are JSON with camelCase field names.
- Money is an integer number of cents with an ISO 4217 currency:
{ "cents": 284000, "currency": "USD" }. - Timestamps are ISO 8601 in UTC; calendar days are
yyyy-MM-dd. Fields without a value are left out or null. - Enums are strings, like
PublishedorVerified. New values can appear, so handle ones you don't know.
Endpoints
The API reads. To change a listing from code or an assistant, use the MCP server with a write key.
GET /listings
List your listings
Every listing you manage across your companies, drafts and private ones included, with status, completeness, verified revenue and launch.
curl https://api.shipfolio.io/api/v1/listings \
-H "Authorization: Bearer $SHIPFOLIO_API_KEY" [
{
"id": "0b8f5d2e-6c1a-4f3e-9a51-2d7e4c9b1a06",
"slug": "trackwise",
"name": "Trackwise",
"tagline": "Time tracking that fills in your timesheet for you",
"logoUrl": "https://shipfolio.io/media/trackwise/logo.png",
"status": "Published",
"visibility": "Public",
"stackCount": 7,
"completenessScore": 86,
"revenue": {
"mrr": {
"cents": 284000,
"currency": "USD"
},
"tier": "Verified",
"capturedOn": "2026-11-14",
"customerCount": 213,
"stripeConnected": true,
"history": [
{
"capturedOn": "2026-10-14",
"mrrCents": 251500,
"tier": "Verified"
},
{
"capturedOn": "2026-11-14",
"mrrCents": 284000,
"tier": "Verified"
}
],
"verifiedBy": [
"Stripe"
],
"stripeKind": "StripeApp"
},
"launch": {
"status": "Ended",
"launchDate": "2026-09-23",
"voteCount": 148
},
"updatedAt": "2026-11-14T09:12:44Z",
"companyId": "5a3c1e90-2b7d-4c8f-8e16-9f0d3b6a2c71",
"companyName": "Trackwise Labs"
},
{
"id": "c41a7e3b-9d20-4b6f-a8c5-1e6f0d9b7a32",
"slug": "invoicely-ai",
"name": "Invoicely AI",
"tagline": "Turns tracked hours into invoices",
"logoUrl": null,
"status": "Draft",
"visibility": "Private",
"stackCount": 3,
"completenessScore": 41,
"updatedAt": "2026-11-10T16:03:10Z",
"companyId": "5a3c1e90-2b7d-4c8f-8e16-9f0d3b6a2c71",
"companyName": "Trackwise Labs"
}
] GET /listings/{slug}
Get one listing
Everything you can edit on one listing: copy, links, tags, completeness and its gaps, revenue history, launch and the company's plan.
curl https://api.shipfolio.io/api/v1/listings/trackwise \
-H "Authorization: Bearer $SHIPFOLIO_API_KEY" {
"id": "0b8f5d2e-6c1a-4f3e-9a51-2d7e4c9b1a06",
"slug": "trackwise",
"name": "Trackwise",
"tagline": "Time tracking that fills in your timesheet for you",
"problemStatement": "Freelancers lose billable hours because they forget to start a timer.",
"description": "Trackwise watches the apps you work in and drafts your timesheet at the end of the day. You approve it in one click.",
"pricingModel": "Freemium",
"priceFrom": {
"cents": 900,
"currency": "USD"
},
"launchDate": "2026-09-23",
"customerCount": 213,
"websiteUrl": "https://trackwise.io",
"githubRepo": "trackwise/desktop",
"xUrl": "https://x.com/trackwiseapp",
"nicheTags": [
"time-tracking",
"freelancers"
],
"audienceTags": [
"freelancers",
"agencies"
],
"alternativeTo": [
"toggl",
"harvest"
],
"visibility": "Public",
"status": "Published",
"githubStars": 1204,
"logoUrl": "https://shipfolio.io/media/trackwise/logo.png",
"publishedAt": "2026-08-02T14:20:00Z",
"updatedAt": "2026-11-14T09:12:44Z",
"stackCount": 7,
"completeness": {
"score": 86,
"gaps": [
{
"field": "shipLog",
"label": "Log what you shipped",
"cluster": "trackwise changelog",
"pages": [
"/p/trackwise/changelog"
],
"weight": 6
}
]
},
"revenue": {
"mrr": {
"cents": 284000,
"currency": "USD"
},
"tier": "Verified",
"capturedOn": "2026-11-14",
"customerCount": 213,
"stripeConnected": true,
"history": [
{
"capturedOn": "2026-10-14",
"mrrCents": 251500,
"tier": "Verified"
},
{
"capturedOn": "2026-11-14",
"mrrCents": 284000,
"tier": "Verified"
}
],
"verifiedBy": [
"Stripe"
],
"stripeKind": "StripeApp"
},
"launch": {
"id": "7e2d9c14-3a8b-4f51-b6e0-c9a1d2f3e485",
"launchDate": "2026-09-23",
"status": "Ended",
"seoTitle": "Trackwise: time tracking that fills in your timesheet",
"seoDescription": "Trackwise drafts your timesheet from the apps you work in.",
"voteCount": 148,
"external": []
},
"company": {
"slug": "trackwise-labs",
"name": "Trackwise Labs",
"isStudio": false,
"kind": "Product"
},
"pro": {
"active": true,
"companyName": "Trackwise Labs",
"canUpgrade": false,
"companyId": "5a3c1e90-2b7d-4c8f-8e16-9f0d3b6a2c71"
}
} GET /listings/{slug}/stack
Get a listing's stack
The tools in the order you set, with your notes and monthly costs where you added them, and the monthly total.
curl https://api.shipfolio.io/api/v1/listings/trackwise/stack \
-H "Authorization: Bearer $SHIPFOLIO_API_KEY" {
"items": [
{
"id": "a1f0c3d2-4b5e-4a6f-8c7d-9e0f1a2b3c4d",
"tool": {
"slug": "nextjs",
"name": "Next.js",
"category": "Frontend",
"logoUrl": "https://shipfolio.io/media/tools/nextjs.svg",
"website": "https://nextjs.org",
"hasAffiliate": false,
"listingCount": 912
},
"category": "Frontend",
"position": 0
},
{
"id": "b2e1d4c3-5a6f-4b7e-9d8c-0f1e2d3c4b5a",
"tool": {
"slug": "supabase",
"name": "Supabase",
"category": "Database",
"logoUrl": "https://shipfolio.io/media/tools/supabase.svg",
"website": "https://supabase.com",
"hasAffiliate": false,
"listingCount": 604
},
"category": "Database",
"note": "Postgres and auth",
"monthlyCost": {
"cents": 2500,
"currency": "USD"
},
"position": 1
},
{
"id": "c3d2e5f4-6b7a-4c8d-ae9f-1a2b3c4d5e6f",
"tool": {
"slug": "stripe",
"name": "Stripe",
"category": "Payments",
"logoUrl": "https://shipfolio.io/media/tools/stripe.svg",
"website": "https://stripe.com",
"hasAffiliate": false,
"listingCount": 1188
},
"category": "Payments",
"position": 2
},
{
"id": "d4c3f6e5-7c8b-4d9e-bf0a-2b3c4d5e6f7a",
"tool": {
"slug": "vercel",
"name": "Vercel",
"category": "Hosting",
"logoUrl": "https://shipfolio.io/media/tools/vercel.svg",
"website": "https://vercel.com",
"hasAffiliate": false,
"listingCount": 840
},
"category": "Hosting",
"monthlyCost": {
"cents": 2000,
"currency": "USD"
},
"position": 3
}
],
"monthlyTotal": {
"cents": 4500,
"currency": "USD"
},
"stackHash": "9c1f4e7a2b"
} Errors
Failures are RFC 9457 problem details: a status, a title and a detail you can show or log.
| Status | When |
|---|---|
| 401 | The key is missing, invalid or revoked. Also when its owner is no longer on a company with Company Pro, or the account is suspended. |
| 404 | No listing with that slug that you manage. Someone else's private listing answers 404 too. |
| 429 | More than 120 requests in a minute with this key. Wait a minute and try again. |
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.2",
"title": "Unauthorized",
"status": 401,
"detail": "The API key is invalid or has been revoked."
} Rate limits
Each key can make 120 requests a minute. Past that the API answers 429 until the minute is up. Cache what you read: listings change when you edit them, not by the second.
Automated access is subject to the terms. Bulk collection is not allowed, and accounts that do it are suspended.