Core concepts

Accounts and tenancy

A key is bound to one subscription. Most resources are limited to exactly that subscription; contacts, projects, tags and custom fields are also visible from a billing account's parent.

A Filmo company can be one subscription on its own, or an organization with several. In an organization, a full account is the parent, and a billing account is one that bills under a parent full account. The key you create belongs to one of them, and GET /api/v1/account returns the name of the account that made the request.

No operation ever crosses data between different organizations.

  • Organization
    • Full account (parent)Sees only its own data.
      • Billing accountsBill under the parent. They also see the parent's inherited resources.

Inherited from the parent account

A billing account sees the parent's and validates references against that same set

Inherited from the parent account
Contacts
Inherited from the parent account
Projects
Inherited from the parent account
Tags
Inherited from the parent account
Custom fields
Inherited from the parent account
Reading an order by id

Strict subscription equality

Bounded exactly to the subscription that owns the key

Strict subscription equality
Items
Strict subscription equality
Serialized items
Strict subscription equality
Spaces
Strict subscription equality
Invoices
Strict subscription equality
Quotes
Strict subscription equality
Tasks
Strict subscription equality
Task types
Strict subscription equality
Repair tickets
Strict subscription equality
Vehicles
Strict subscription equality
Staff
Strict subscription equality
Subrents
Strict subscription equality
Purchase orders
Strict subscription equality
Contracts
Strict subscription equality
Project types
Strict subscription equality
The order list
Strict subscription equality
Availability
  • There is no widening between sibling billing accounts, nor from a parent to its billing accounts, and no operation crosses data between organizations.
  • Reading a resource outside your tenancy is a 404 not_found, identical to it not existing. Writing a body that references an identifier outside it is a 400 validation_error naming the field, and nothing is written.
Tenancy: what a key sees

How far a key sees depends on how Filmo models the ownership of each resource. The table below lists the resources of each kind.

SemanticsResourcesWhat a key sees
Inherited from the parent accountContacts, projects, tags and custom fields, and reading an order by idA billing account also sees these resources of its parent account, and validates references against that same set when it writes. A full account, and a subscription outside any organization, only sees its own.
Strict subscription equalityEverything else: items, serialized items, spaces, invoices, quotes, tasks, task types, repair tickets, vehicles, staff, subrents, purchase orders, contracts, project types, the order list and availabilityExactly the subscription that owns the key. Not widened to the organization.

Inheritance goes one way only. There is no widening between sibling billing accounts, nor from a parent to its billing accounts. Reading an order by id is inherited, but the order list is strict, so an order you can open by id may not appear in your list.

You doResultWhy
Read a resource outside the tenancy of your key404 not_foundIt is identical to the resource not existing. The API never reveals that it exists.
Write a body that references an identifier outside your tenancy, such as the contactId of an order400 validation_error naming the field, and nothing is writtenThe message is the same whether the identifier does not exist or belongs to another account, so it cannot be used to probe either. It is a 400 because what is wrong is the body, not the route.

A 404 is not always a deleted record

If a record disappears from your sync with a 404, it may have been deleted, archived, or never been in your tenancy. Confirm before deleting anything on your side; Syncing data explains how.

Integrations that serve several rental companies need one key per customer account; see Multi-account integrations. The same ideas in the app are covered in Workspace preferences.

  • Core concepts

    Records and ids

    Every record has an opaque id that Filmo assigns. Keep your own ids in a mapping table on your side, and use a reference field only where the API has one.

  • Core concepts

    Permissions

    A refusal has three different causes: the key lacks a scope, the key's owner lacks a permission, or the account lacks an add-on. Each has a different status or code and a different fix.

  • Guides

    Multi-account integrations

    Give each customer account its own credential, store it with that account's timezone and currency, and treat a failing credential as the state of one connection, not of your whole product. OAuth is available for a server you run, and API keys are simpler for server-to-server work.