SecuAAS Docs

Organization and Billing Endpoints

SecuFile — Organization and Billing Endpoints

Organization and Billing Endpoints

Organization and Billing Endpoints

Organizations (Multi-tenant)

Organizations represent tenants in SecuFile's SaaS model. Each organization has its own users, files, encryption keys, and S3 bucket.

GET /api/v1/organizations

List organizations accessible to the current user.

POST /api/v1/organizations

Create a new organization. This automatically triggers:

  • Dedicated OVH S3 bucket creation
  • RSA-4096 key pair generation
  • Stripe customer creation
  • Default plan assignment (free)
  • Default folder creation (uploads, transfert, Data)
{
  "name": "My Organization",
  "type": "client",
  "parent_msp_id": "uuid"
}

GET /api/v1/organizations/:org_id

Get organization details.

PATCH /api/v1/organizations/:org_id

Update an organization.

DELETE /api/v1/organizations/:org_id

Delete an organization (soft delete recommended).

Organization User Management

MethodEndpointDescription
GET/organizations/:org_id/usersList users
POST/organizations/:org_id/usersAdd a user
PATCH/organizations/:org_id/users/:user_idUpdate user role
DELETE/organizations/:org_id/users/:user_idRemove a user
POST/organizations/:org_id/users/:user_id/reset-passwordReset user password

Organization Storage

MethodEndpointDescription
GET/organizations/:org_id/storageGet storage config
POST/organizations/:org_id/storageCreate storage config
POST/organizations/:org_id/storage/provisionProvision S3 bucket
DELETE/organizations/:org_id/storageDelete storage config
GET/organizations/:org_id/storage/statusGet storage status

Organization Notifications

MethodEndpointDescription
GET/organizations/:org_id/notification-configGet notification config
PUT/organizations/:org_id/notification-configUpdate notification config
POST/organizations/:org_id/notification-config/test-emailTest email connection
POST/organizations/:org_id/notification-config/test-smsTest SMS connection
GET/organizations/:org_id/notification-logsGet notification logs
MethodEndpointDescription
GET/organizations/:org_id/settings/consent-textGet Loi 25 consent text
PUT/organizations/:org_id/settings/consent-textUpdate consent text

Subscriptions

GET /api/v1/organizations/:org_id/subscription

Get the organization's active subscription.

{
  "id": "uuid",
  "plan_id": "uuid",
  "plan_name": "Pro",
  "status": "active",
  "current_period_start": "2026-02-01T00:00:00Z",
  "current_period_end": "2026-03-01T00:00:00Z",
  "stripe_subscription_id": "sub_xxxx"
}

POST /api/v1/organizations/:org_id/subscription/change

Change subscription plan. Handles Stripe prorations automatically.

{
  "plan_id": "uuid"
}

POST /api/v1/organizations/:org_id/subscription/cancel

Cancel subscription (effective at end of period).

POST /api/v1/organizations/:org_id/subscription/reactivate

Reactivate a cancelled subscription (before period end).

Pricing Plans

GET /api/v1/plans (public)

List available plans.

{
  "plans": [
    {
      "id": "uuid",
      "name": "Free",
      "code": "free",
      "storage_limit_bytes": 104857600,
      "price_monthly": 0,
      "price_yearly": 0,
      "features": ["100 MB storage", "1 user"],
      "is_public": true
    },
    {
      "id": "uuid",
      "name": "Pro",
      "code": "pro",
      "storage_limit_bytes": 10737418240,
      "price_monthly": 1999,
      "price_yearly": 19990,
      "features": ["10 GB storage", "10 users", "E2E encryption"],
      "is_public": true
    }
  ]
}

Invoices

MethodEndpointDescription
GET/organizations/:org_id/invoicesList invoices
GET/organizations/:org_id/invoices/:idInvoice details
GET/organizations/:org_id/invoices/:id/pdfDownload PDF
POST/organizations/:org_id/invoices/:id/payMark as paid
POST/organizations/:org_id/invoices/:id/voidVoid an invoice
POST/organizations/:org_id/invoices/:id/finalizeFinalize an invoice

Payment Methods

MethodEndpointDescription
GET/organizations/:org_id/payment-methodsList methods
POST/organizations/:org_id/payment-methodsAdd (via Stripe)
GET/organizations/:org_id/payment-methods/:idGet details
DELETE/organizations/:org_id/payment-methods/:idDelete
POST/organizations/:org_id/payment-methods/:id/defaultSet as default

Invitations

MethodEndpointDescription
GET/organizations/:org_id/invitationsList invitations
POST/organizations/:org_id/invitationsCreate invitation
GET/organizations/:org_id/invitations/:idGet invitation
DELETE/organizations/:org_id/invitations/:idDelete invitation
POST/organizations/:org_id/invitations/:id/revokeRevoke
POST/organizations/:org_id/invitations/:id/resendResend email

Public invitation routes (no auth):

MethodEndpointDescription
GET/api/v1/invitations/:tokenGet invitation by token
POST/api/v1/invitations/:token/acceptAccept invitation

Coupons

MethodEndpointDescription
GET/api/v1/couponsList coupons
POST/api/v1/couponsCreate coupon
GET/api/v1/coupons/:idGet coupon
PATCH/api/v1/coupons/:idUpdate coupon
DELETE/api/v1/coupons/:idDelete coupon
POST/api/v1/coupons/validateValidate a coupon code
POST/api/v1/coupons/:code/redeemRedeem a coupon

Usage Metering

MethodEndpointDescription
GET/organizations/:org_id/usageCurrent usage
GET/organizations/:org_id/usage/historyUsage history
GET/organizations/:org_id/usage/summaryUsage summary

Stripe Webhooks

POST /api/v1/webhooks/stripe

Receives and processes Stripe events. Signature verification is performed internally. The stripe_events_processed table ensures idempotency.

Events processed:

  • customer.subscription.*: Subscription updates
  • invoice.*: Invoice updates
  • payment_method.*: Payment method updates
  • charge.*: Charge tracking

On this page