Octany. for/devs
§ 04 — API-referens

Bläddra API:et per resurs.

Octany-API:et hanterar prenumerationer, produkter, ordrar och webhook-endpoints. Den här sidan är till för dig som vill förstå API:et som människa. Behöver du maskinläsbara typer hittar du dem i OpenAPI-specen.

Baskontrakt Varje endpoint är scopad till ett konto: https://app.octany.com/api/{account}. Skicka kontots API-nyckel i headern X-API-KEY.

§ 04.1 Grunderna #

Bas-URL

https://app.octany.com/api/{account}

Autentisering

X-API-KEY: <din-api-nyckel>
X-Locale: sv

API-nycklar är scopade till ett konto. Sätt X-Locale om du vill ha valideringsmeddelanden och formaterade strängar på ett specifikt språk.

Resurs-ID:n

id-värdena på Subscription, Order och webhook-leveranser är heltal i produktion idag (t.ex. 76963688). Hantera dem som opaka identifierare i lagringen — använd en kolumn som rymmer en framtida formatändring (sträng eller bigint). Validera inte formatet och bygg inte logik kring is_int/typeof === 'number'; skicka tillbaka dem precis som du fick dem. Produkt-ID:n är heltal och kommer rimligtvis inte byta format. Konto-ID i URL-pathar är numeriska idag också; behandla dem som opaka.

Paginering

List-endpoints returnerar data plus pagination. Använd ?page=2 för att bläddra vidare. Skicka X-Locale: sv om du vill ha svenska felmeddelanden och valideringstexter.

{
  "data": [],
  "pagination": {
    "total": 142,
    "count": 20,
    "per_page": 20,
    "current_page": 1,
    "total_pages": 8,
    "links": { "next": "https://app.octany.com/api/{account}/subscriptions?page=2" }
  }
}

§ 04.2 Subscriptions #

Subscriptions står för återkommande fakturering av en produkt. Spara prenumerationens id när subscription.created kommer fram — sedan kan du använda det för uppsägning, engångsordrar eller produktbyte.

GET/subscriptions

Listar prenumerationer. Stödjer page och filter[reference_id].

curl "https://app.octany.com/api/$ACCOUNT/subscriptions?filter[reference_id]=user_42" \
  -H "X-API-KEY: $OCTANY_KEY"
GET/subscription/{id}

Hämta en prenumeration via dess Octany-ID.

curl "https://app.octany.com/api/$ACCOUNT/subscription/76963688" \
  -H "X-API-KEY: $OCTANY_KEY"
POST/subscription/{id}/cancel

Avsluta en prenumeration. Inga fler förnyelser görs. Beroende på produkten kan prenumerationen vara aktiv fram till ends_at.

curl -X POST "https://app.octany.com/api/$ACCOUNT/subscription/76963688/cancel" \
  -H "X-API-KEY: $OCTANY_KEY"
POST/subscription/{id}/product

Byt produkten på en prenumeration.

curl -X POST "https://app.octany.com/api/$ACCOUNT/subscription/76963688/product" \
  -H "X-API-KEY: $OCTANY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "product_id": 42 }'
GET/subscription/{id}/orders

Lista ordrar för en prenumeration. Stödjer page, per_page, filter[product_id] och filter[state].

curl "https://app.octany.com/api/$ACCOUNT/subscription/76963688/orders?filter[state]=paid&per_page=50" \
  -H "X-API-KEY: $OCTANY_KEY"
POST/subscription/{id}/order

Skapa en engångsorder på en befintlig prenumeration, debiterad via prenumerationens betalsätt.

curl -X POST "https://app.octany.com/api/$ACCOUNT/subscription/76963688/order" \
  -H "X-API-KEY: $OCTANY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "product_id": 89,
        "amount": 4995,
        "quantity": 1,
        "vat": 2500,
        "description": "Extra item"
      }'

§ 04.3 Orders #

GET/order/{id}

Hämta en order via dess Octany-ID. Ordrar exponerar totaler, moms, status, referensfält, leveranslänkar, metadata och egna fält.

curl "https://app.octany.com/api/$ACCOUNT/order/516253755" \
  -H "X-API-KEY: $OCTANY_KEY"

Order-status

created confirmed payment_pending_user payment_pending payment_failed payment_cancelled payment_refunded paid

§ 04.4 Products #

GET/products

Lista produkter. Produktsvar innehåller pris, moms, intervall, lagerflaggor, bilder och visningssträngar.

curl "https://app.octany.com/api/$ACCOUNT/products" \
  -H "X-API-KEY: $OCTANY_KEY"
GET/product/{id}

Hämta en produkt via numeriskt produkt-ID.

curl "https://app.octany.com/api/$ACCOUNT/product/42" \
  -H "X-API-KEY: $OCTANY_KEY"
POST/product/{id}

Uppdatera en produkt. Bara skickade fält uppdateras.

curl -X POST "https://app.octany.com/api/$ACCOUNT/product/42" \
  -H "X-API-KEY: $OCTANY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "Månadsmedlemskap",
        "description": "Tillgång till medlemsinnehåll.",
        "price": 9900,
        "currency": "SEK",
        "vat_rate": 25,
        "interval": "month"
      }'
DELETE/product/{id}

Ta bort en produkt.

curl -X DELETE "https://app.octany.com/api/$ACCOUNT/product/42" \
  -H "X-API-KEY: $OCTANY_KEY"

§ 04.5 Webhook-endpoints #

POST/webhooks/endpoints

Registrera en URL som ska ta emot signerade webhook-event. Endpoint-hemligheten genereras av Octany och hämtas från admin efter att endpointen skapats.

curl -X POST "https://app.octany.com/api/$ACCOUNT/webhooks/endpoints" \
  -H "X-API-KEY: $OCTANY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://app.example.com/octany/webhook" }'

§ 04.6 Payload-form #

Subscription — statuslivscykel

Åtta värden: pending, future_start, trialing, active, delayed, unpaid, cancelled, expired. Det finns två övergångar som ofta krånglar till det för integratörer:

Den enda boolean de flesta integratörer faktiskt vill ha:

function isPaying(string $status, ?DateTimeInterface $endsAt): bool
{
    return in_array($status, ['active', 'trialing'], true)
        && ($endsAt === null || $endsAt > new DateTime());
}

Allt annat — delayed, unpaid, pending, expired, cancelled efter ends_at — är "ingen åtkomst". Se integration.md för hela livscykeldiagrammet.

Subscription

{
  "id": 76963688,
  "price": 9900,
  "vat": 2500,
  "currency": "SEK",
  "renews_at": "2026-05-25T09:29:51+00:00",
  "reference_id": "member_42",
  "reference_name": "Anna Persson",
  "status": "active",
  "update_card_url": "https://octanybilling.com/...",
  "invoices_url": "https://octanybilling.com/...",
  "cancel_url": "https://octanybilling.com/...",
  "custom_fields": [],
  "metadata": {}
}

Order

{
  "id": 516253755,
  "total": 7920,
  "total_with_vat": 9900,
  "currency": "SEK",
  "reference_id": "member_42",
  "state": "paid",
  "delivery": { "link": "https://..." },
  "custom_fields": [],
  "metadata": {}
}

Product

{
  "id": 42,
  "name": "Månadsmedlemskap",
  "description": "Tillgång till medlemsinnehåll.",
  "type": "Recurring",
  "price": 9900,
  "price_with_vat": 9900,
  "price_without_vat": 7920,
  "currency": "SEK",
  "vat_rate": 25,
  "interval": "month",
  "use_cart": true,
  "stock_tracking": false,
  "out_of_stock": false
}