Insights

AdminUpdated Sep 24, 2026
GEThttps://shippified.net/api/profitability
Profit & loss for a calendar period.

Revenue is each order's `salePriceCents` and cost is its `costCents`, for orders received in the period; subscription overhead, pro-rated to the period, is subtracted for net profit. Includes a daily series, breakdowns by store and by source, and totals for the previous period for comparison. Periods are calendar-aligned in UTC.

Parameters
NameInTypeRequiredDescription
rangequerystringnoCurrent month, quarter or year, or all time. Unknown values fall back to `month`.
Responses
200 OK
{
  "range": "month",
  "window": {
    "range": "month",
    "start": "2024-01-01T00:00:00Z",
    "end": "2024-01-01T00:00:00Z",
    "label": "Q3 2026"
  },
  "previousWindow": {},
  "generatedAt": "2024-01-01T00:00:00Z",
  "revenueCents": 0,
  "cogsCents": 0,
  "subsCostCents": 0,
  "grossProfitCents": 0,
  "netProfitCents": 0,
  "orderCount": 0,
  "ordersWithSalePrice": 0,
  "coverage": 0,
  "daily": [
    {
      "date": "string",
      "revenueCents": 0,
      "cogsCents": 0,
      "profitCents": 0
    }
  ],
  "perStore": [
    {
      "name": "string",
      "revenueCents": 0,
      "cogsCents": 0,
      "profitCents": 0,
      "count": 0
    }
  ],
  "perSource": [
    {
      "name": "string",
      "revenueCents": 0,
      "cogsCents": 0,
      "profitCents": 0,
      "count": 0
    }
  ],
  "previous": {
    "revenueCents": 0,
    "netProfitCents": 0
  }
}
401 Not authenticated.
Code samples
cURL
curl -X GET "https://shippified.net/api/profitability?range="
TypeScript
const res = await fetch('https://shippified.net/api/profitability?range=', {
  method: 'GET',
});
const data = await res.json();
Python
import requests

res = requests.request(
    "GET",
    "https://shippified.net/api/profitability?range=",
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://shippified.net/api/profitability?range=", nil)
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://shippified.net/api/profitability?range=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://shippified.net/api/profitability?range=')
req = Net::HTTP::Get.new(uri)
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://shippified.net/api/profitability?range="))
    .GET()
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
GEThttps://shippified.net/api/calendar
Order, delivery and subscription-renewal events for one month.

Each order contributes an `order_received` event and either a `delivered` event (actual delivery date) or an `estimated_delivery` event. Active subscriptions contribute a `subscription_renewal` event on each renewal date in the month. Dates are UTC days; events are sorted by date, then kind.

Parameters
NameInTypeRequiredDescription
monthquerystringnoMonth as `YYYY-MM`. Defaults to the current UTC month.
Responses
200 OK
{
  "month": "2026-09",
  "generatedAt": "2024-01-01T00:00:00Z",
  "events": [
    {
      "date": "string",
      "kind": "order_received",
      "label": "string",
      "amount": "string",
      "ref": {
        "type": "order",
        "id": "string"
      },
      "meta": {}
    }
  ]
}
400 `month` isn't a valid `YYYY-MM`.
{
  "error": "string"
}
401 Not authenticated.
Code samples
cURL
curl -X GET "https://shippified.net/api/calendar?month="
TypeScript
const res = await fetch('https://shippified.net/api/calendar?month=', {
  method: 'GET',
});
const data = await res.json();
Python
import requests

res = requests.request(
    "GET",
    "https://shippified.net/api/calendar?month=",
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://shippified.net/api/calendar?month=", nil)
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://shippified.net/api/calendar?month=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://shippified.net/api/calendar?month=')
req = Net::HTTP::Get.new(uri)
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://shippified.net/api/calendar?month="))
    .GET()
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
GEThttps://shippified.net/api/leaderboard
Order-count leaderboard across workspaces.

Only workspaces that opted in with `POST /api/account/public-stats` are ranked, plus you (flagged `isYou`) so you can always see where you'd place, without being shown to anyone else. `week` and `month` are rolling 7- and 30-day windows ranked by `windowed`; `all` ranks by lifetime count.

Parameters
NameInTypeRequiredDescription
timeframequerystringnoUnknown values fall back to `all`.
Responses
200 OK
{
  "timeframe": "week",
  "generatedAt": "2024-01-01T00:00:00Z",
  "total": 0,
  "rows": [
    {
      "rank": 0,
      "userId": "string",
      "username": "string",
      "displayName": "string",
      "publicProfile": true,
      "lifetime": 0,
      "windowed": 0,
      "level": 0,
      "isYou": true
    }
  ]
}
401 Not authenticated.
Code samples
cURL
curl -X GET "https://shippified.net/api/leaderboard?timeframe="
TypeScript
const res = await fetch('https://shippified.net/api/leaderboard?timeframe=', {
  method: 'GET',
});
const data = await res.json();
Python
import requests

res = requests.request(
    "GET",
    "https://shippified.net/api/leaderboard?timeframe=",
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://shippified.net/api/leaderboard?timeframe=", nil)
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://shippified.net/api/leaderboard?timeframe=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://shippified.net/api/leaderboard?timeframe=')
req = Net::HTTP::Get.new(uri)
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://shippified.net/api/leaderboard?timeframe="))
    .GET()
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Was this page helpful?