Subscriptions

Subscriptions

Recurring billing documents (Invoice_Type = subscription). List/detail reuse invoice handlers. Create/update use relations.write.

List subscriptions

GET /v1/subscriptions
invoices.read
Authorization: HTTP
name: httpBearer
type: http
scheme: bearer
Query
Name Type Description
page integer Page number (from 1, default 1)
per_page integer Items per page (default 25, max 200)
id string
client_id string
legacy_status_id integer Legacy integer filter; removed in v2.
number string Filter by document number
date_from string Invoice date from (Y-m-d)
date_to string Invoice date to (Y-m-d)
due_date_from string Due date from (Y-m-d)
due_date_to string Due date to (Y-m-d)
created_from string Created from
created_to string Created to
search string Free-text search
payment_status string Filter by payment_status
sort string Sort field for invoice/quote/subscription lists.
order string Sort direction (stored uppercased server-side).
Request body

None

Response
data array
id string
number string
title string
type string

Document type is fixed by the route; not accepted on create.

Enum
invoice quote subscription
invoice_date string
due_date string
created_at string
subtotal number
vat_rate number
vat_amount number
total_excl_vat number
total_incl_vat number
client_id string
payment_status string

Free string matching Invoice_Payment_Status (exact). Not a closed enum in the handler.

paid_at string Nullable
sent_at string Nullable
project_number string Nullable
is_credit boolean
meta object
page integer
per_page integer
total integer
pages integer

Examples

GET /v1/subscriptions
curl -X GET "https://api.appficient.nl/v1/subscriptions" \
  -H "Authorization: Bearer apf_xxxxxxxx" \
  -H "Accept: application/json"

Curl, Node and response are shown to the right of this endpoint.

Create a subscription

POST /v1/subscriptions
clients.write
Authorization: HTTP
name: httpBearer
type: http
scheme: bearer
Headers
Name Type Description
Idempotency-Key string Optional on POST only; cached 24h; replay returns X-Idempotent-Replay
Request body
client_id string
client_external_id string
title string
frequency string

Subscription frequency (canonical). Default `monthly` when omitted.

Enum
weekly four_weeks monthly quarterly half_yearly yearly
Example: monthly
subscription_start string
subscription_end string
first_generate_date string
day_of_month integer
day_of_week integer
lines array
title string
description string
quantity number
unit_price number
unit string
vat_code string
Response
data object

ID-only (UUID); no `id`.

id string
status string

Create always returns `draft`. Update returns `draft` if no number else `open`.

Enum
draft open
start_date string
end_date string Nullable
term string

Canonical subscription term in responses.

Enum
weekly four_weeks monthly quarterly half_yearly yearly
schedule object
schedule_type string
Enum
start_date day_of_month
day_of_month integer
day_of_week integer

ISO weekday 1=Monday … 7=Sunday

next_generate string
meta object

Examples

POST /v1/subscriptions
curl -X POST "https://api.appficient.nl/v1/subscriptions" \
  -H "Authorization: Bearer apf_xxxxxxxx" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "client_external_id": "string",
    "title": "string",
    "frequency": "monthly",
    "subscription_start": "2026-07-01",
    "subscription_end": "2026-07-01",
    "first_generate_date": "2026-07-01",
    "day_of_month": 0,
    "day_of_week": 0,
    "lines": [
        {
            "title": "string",
            "description": "string",
            "quantity": 0,
            "unit_price": 0,
            "unit": "string",
            "vat_code": "string"
        }
    ]
}'

Curl, Node and response are shown to the right of this endpoint.

Retrieve a subscription

GET /v1/subscriptions/{id}
invoices.read
Authorization: HTTP
name: httpBearer
type: http
scheme: bearer
Path
Name Type Description
id Required string Resource id (UUID, lowercase)
Request body

None

Response
data object

ID-only (UUID). Internal ints (status/fase/employee) are not returned.

id string
number string
title string
type string

Document type is fixed by the route; not accepted on create.

Enum
invoice quote subscription
invoice_date string
due_date string
created_at string
subtotal number
vat_rate number
vat_amount number
total_excl_vat number
total_incl_vat number
client_id string
payment_status string

Free string matching Invoice_Payment_Status (exact). Not a closed enum in the handler.

paid_at string Nullable
sent_at string Nullable
project_number string Nullable
is_credit boolean
rows array
name string
description string
quantity number
unit string
unit_price number
vat_rate string
total_excl_vat number
total_incl_vat number
client_company_name string
client_firstname string
client_lastname string
web_url string
pdf_url string
meta object

Examples

GET /v1/subscriptions/{id}
curl -X GET "https://api.appficient.nl/v1/subscriptions/{id}" \
  -H "Authorization: Bearer apf_xxxxxxxx" \
  -H "Accept: application/json"

Curl, Node and response are shown to the right of this endpoint.

Update a subscription

PATCH /v1/subscriptions/{id}
clients.write
Authorization: HTTP
name: httpBearer
type: http
scheme: bearer
Path
Name Type Description
id Required string Resource id (UUID, lowercase)
Request body
title string
frequency string

Subscription frequency (canonical). Default `monthly` when omitted.

Enum
weekly four_weeks monthly quarterly half_yearly yearly
Example: monthly
subscription_start string
subscription_end string
day_of_month integer
day_of_week integer
lines array
title string
description string
quantity number
unit_price number
unit string
vat_code string
Response
data object

ID-only (UUID); no `id`.

id string
status string

Create always returns `draft`. Update returns `draft` if no number else `open`.

Enum
draft open
start_date string
end_date string Nullable
term string

Canonical subscription term in responses.

Enum
weekly four_weeks monthly quarterly half_yearly yearly
schedule object
schedule_type string
Enum
start_date day_of_month
day_of_month integer
day_of_week integer

ISO weekday 1=Monday … 7=Sunday

next_generate string
meta object

Examples

PATCH /v1/subscriptions/{id}
curl -X PATCH "https://api.appficient.nl/v1/subscriptions/{id}" \
  -H "Authorization: Bearer apf_xxxxxxxx" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "string",
    "frequency": "monthly",
    "subscription_start": "2026-07-01",
    "subscription_end": "2026-07-01",
    "day_of_month": 0,
    "day_of_week": 0,
    "lines": [
        {
            "title": "string",
            "description": "string",
            "quantity": 0,
            "unit_price": 0,
            "unit": "string",
            "vat_code": "string"
        }
    ]
}'

Curl, Node and response are shown to the right of this endpoint.

Deactivate a subscription

POST /v1/subscriptions/{id}/deactivate
clients.write
Authorization: HTTP
name: httpBearer
type: http
scheme: bearer
Path
Name Type Description
id Required string Resource id (UUID, lowercase)
Request body
subscription_end string

Y-m-d; defaults to today

Response
data object
id string
status string
Enum
deactivated
end_date string
meta object

Examples

POST /v1/subscriptions/{id}/deactivate
curl -X POST "https://api.appficient.nl/v1/subscriptions/{id}/deactivate" \
  -H "Authorization: Bearer apf_xxxxxxxx" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "subscription_end": "2026-07-01"
}'

Curl, Node and response are shown to the right of this endpoint.