{"items":[{"type":"link","fsPath":"api-docs/index.md","metadata":{"type":"markdown"},"label":"Overview","link":"/api-docs","routeSlug":"/api-docs"},{"type":"group","label":"Guides","items":[{"type":"link","fsPath":"api-docs/guides/errors.md","metadata":{"type":"markdown"},"label":"Errors and status codes","link":"/api-docs/guides/errors","routeSlug":"/api-docs/guides/errors"},{"type":"link","fsPath":"api-docs/guides/request-filters.md","metadata":{"type":"markdown"},"label":"Filtering, sorting and pagination","link":"/api-docs/guides/request-filters","routeSlug":"/api-docs/guides/request-filters"},{"type":"link","fsPath":"api-docs/guides/rate-limits.md","metadata":{"type":"markdown"},"label":"Rate limits","link":"/api-docs/guides/rate-limits","routeSlug":"/api-docs/guides/rate-limits"},{"type":"link","fsPath":"api-docs/guides/webhooks.md","metadata":{"type":"markdown"},"label":"Webhooks","link":"/api-docs/guides/webhooks","routeSlug":"/api-docs/guides/webhooks"}],"expanded":"true"},{"type":"group","label":"API reference","items":[{"type":"link","label":"Rosterfy API Documentation","link":"/api-docs/openapi","routeSlug":"/api-docs/openapi"},{"type":"group","label":"Authentication","link":"/api-docs/openapi/authentication","routeSlug":"/api-docs/openapi/authentication","items":[{"label":"Request an access token","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/authentication/requestanaccesstoken","routeSlug":"/api-docs/openapi/authentication/requestanaccesstoken","metadata":{"seo":{"title":"Request an access token","description":"Exchanges a set of client credentials and a user's sign-in details for an access token.Every other endpoint in this API expects the result in anAuthorization: Bearer <access_token> header, so this is the first call an integrationmakes."}},"httpPath":"/api/v2/oauth/token"},{"label":"List your personal access clients","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/authentication/listyourpersonalaccessclients","routeSlug":"/api-docs/openapi/authentication/listyourpersonalaccessclients","metadata":{"seo":{"title":"List your personal access clients","description":"Returns the personal access clients registered against the authenticated user. Apersonal access client is the client_id half of the credentials the token endpointexchanges for an access token, and id here is that client_id."}},"httpPath":"/api/v2/oauth/clients"},{"label":"Register a personal access client","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/authentication/registerapersonalaccessclient","routeSlug":"/api-docs/openapi/authentication/registerapersonalaccessclient","metadata":{"seo":{"title":"Register a personal access client","description":"Registers a new personal access client against the authenticated user and returns it.The id on the response is the client_id the token endpoint expects."}},"httpPath":"/api/v2/oauth/clients"}]},{"type":"group","label":"Me Module","link":"/api-docs/openapi/me-module","routeSlug":"/api-docs/openapi/me-module","items":[{"label":"Get current user","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/me-module/getcurrentuser","routeSlug":"/api-docs/openapi/me-module/getcurrentuser","metadata":{"seo":{"title":"Get current user","description":"Returns everything a client needs about the signed-in user in a single call: who they are,what they are allowed to do, and how their experience should be configured. This is thecall to make immediately after authenticating."}},"httpPath":"/api/v2/user/me"},{"label":"Get current account configuration","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/me-module/getcurrentaccountconfiguration","routeSlug":"/api-docs/openapi/me-module/getcurrentaccountconfiguration","metadata":{"seo":{"title":"Get current account configuration","description":"Returns the configuration a client needs in order to present the organisation correctly:how the account identifies itself, the settings that shape the experience, the wording ituses for everyday concepts, and the locales it offers. Which account answers is determinedby the subdomain the request is made against, so no identifier is passed."}},"httpPath":"/api/v2/account/data"},{"label":"Get my statistics","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/me-module/getmystatistics","routeSlug":"/api-docs/openapi/me-module/getmystatistics","metadata":{"seo":{"title":"Get my statistics","description":"Returns the headline activity totals for the signed-in user - the sort of figures avolunteer portal shows on a dashboard, such as events attended, shifts worked, hourscontributed and the current reward point balance. Each entry carries a stable code tokey off, a display label already rendered in the account's own terminology, the valueitself, and an icon hint the portal uses."}},"httpPath":"/api/v2/me/stats"},{"label":"List my training","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/me-module/listmytraining","routeSlug":"/api-docs/openapi/me-module/listmytraining","metadata":{"seo":{"title":"List my training","description":"Returns the published training modules that are relevant to the signed-in user: those theyhave been assigned, plus any module the organisation has made elective so that anyone maystart it. Modules the user has been explicitly exempted from are left out, as are modulesthat have not been published. Training shared down from a parent organisation is includedalongside the account's own."}},"httpPath":"/api/v2/me/training"},{"label":"List my events","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/me-module/listmyevents","routeSlug":"/api-docs/openapi/me-module/listmyevents","metadata":{"seo":{"title":"List my events","description":"Returns the events the signed-in user has a record against - anything they have appliedfor, been rostered onto, attended or registered interest in. An event the user has noinvolvement with is never returned, so this is the volunteer's own history and upcomingschedule rather than a catalogue of what the organisation is running."}},"httpPath":"/api/v2/me/event"},{"label":"List my inventory items","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/me-module/listmyinventoryitems","routeSlug":"/api-docs/openapi/me-module/listmyinventoryitems","metadata":{"seo":{"title":"List my inventory items","description":"Returns the inventory the signed-in user holds - uniforms, equipment, passes, awards andanything else the organisation tracks against a person. Rows come back in the order theuser has arranged them."}},"httpPath":"/api/v2/me/inventory/item"},{"label":"Get my reward point balance","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/me-module/getmyrewardpointbalance","routeSlug":"/api-docs/openapi/me-module/getmyrewardpointbalance","metadata":{"seo":{"title":"Get my reward point balance","description":"Returns the signed-in user's current reward point balance as a single number. The balanceis the net of every points transaction on the account - points awarded for attendingshifts, completing training or any other earning rule the organisation has configured,less anything already redeemed."}},"httpPath":"/api/v2/me/reward-point/balance"}]},{"type":"group","label":"User Module","link":"/api-docs/openapi/user-module","routeSlug":"/api-docs/openapi/user-module","items":[{"label":"List users","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/user-module/listusers","routeSlug":"/api-docs/openapi/user-module/listusers","metadata":{"seo":{"title":"List users","description":"Returns the people on your account: their name, contact details, date ofbirth, address, and a value for every custom attribute the account collectsabout a person. The nice block repeats the same values rendered fordisplay - the phone number formatted for its country, the address as onestring, select ids resolved to their labels - so a table can be drawnwithout resolving anything yourself."}},"httpPath":"/api/v2/user"},{"label":"Create a user","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/user-module/createauser","routeSlug":"/api-docs/openapi/user-module/createauser","metadata":{"seo":{"title":"Create a user","description":"Adds a person to your account and returns the created record. The responsecarries only the fields the create actually set, so it is a smaller objectthan reading the same person back afterwards - read them again if you needthe full record."}},"httpPath":"/api/v2/user"},{"label":"Update many users at once","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/user-module/updatemanyusersatonce","routeSlug":"/api-docs/openapi/user-module/updatemanyusersatonce","metadata":{"seo":{"title":"Update many users at once","description":"Applies one set of changes to many people and returns a token identifyingthe queued job. The work happens in the background, so a 200 means therequest was accepted, not that every record has been updated."}},"httpPath":"/api/v2/user"},{"label":"Read a user","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/user-module/readauser","routeSlug":"/api-docs/openapi/user-module/readauser","metadata":{"seo":{"title":"Read a user","description":"Returns one person's record: contact details, date of birth, address,subscription and verification state, and a value for every custom attributethe account collects. The nice block repeats those values rendered fordisplay, and permissions says what your token may go on to do with thisperson."}},"httpPath":"/api/v2/user/{id}"},{"label":"Update a user","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/user-module/updateauser","routeSlug":"/api-docs/openapi/user-module/updateauser","metadata":{"seo":{"title":"Update a user","description":"Updates one person's record and returns it, the same shape as reading itback. Every field is optional, so a body carrying only what changed is safe"}},"httpPath":"/api/v2/user/{id}"},{"label":"Delete a user","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/user-module/deleteauser","routeSlug":"/api-docs/openapi/user-module/deleteauser","metadata":{"seo":{"title":"Delete a user","description":"Removes a person from the account. The record is soft-deleted rather thanerased, so their history on shifts, training and forms is preserved and thedeletion can be undone in-platform."}},"httpPath":"/api/v2/user/{id}"},{"label":"Add users to groups in bulk","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/user-module/adduserstogroupsinbulk","routeSlug":"/api-docs/openapi/user-module/adduserstogroupsinbulk","metadata":{"seo":{"title":"Add users to groups in bulk","description":"Adds many people to one or more user groups and returns a token identifyingthe queued job. The work happens in the background, so a 200 means therequest was accepted, not that every membership exists yet. People alreadyin a group are skipped rather than duplicated."}},"httpPath":"/api/v2/user/group/user"}]},{"type":"group","label":"Account Module","link":"/api-docs/openapi/account-module","routeSlug":"/api-docs/openapi/account-module","items":[{"label":"List sub-accounts","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/listsubaccounts","routeSlug":"/api-docs/openapi/account-module/listsubaccounts","metadata":{"seo":{"title":"List sub-accounts","description":"Returns the sub-accounts sitting directly beneath the one you are signed in to.Neither the account you are calling as nor anything above it is included, andaccounts in a different part of the hierarchy are never returned."}},"httpPath":"/api/v2/account"},{"label":"Create a sub-account","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/createasubaccount","routeSlug":"/api-docs/openapi/account-module/createasubaccount","metadata":{"seo":{"title":"Create a sub-account","description":"Creates a sub-account directly beneath the one you are signed in to. The parent isalways taken from the caller and cannot be set from the request. The response isthe same shape as reading the account, so a follow-up read is not needed."}},"httpPath":"/api/v2/account"},{"label":"Read a sub-account","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/readasubaccount","routeSlug":"/api-docs/openapi/account-module/readasubaccount","metadata":{"seo":{"title":"Read a sub-account","description":"Returns one account from your own part of the hierarchy: its name, where it sits,its contact and billing details, the domains it answers on, and the featuresettings it has turned on."}},"httpPath":"/api/v2/account/{id}"},{"label":"Update a sub-account","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/updateasubaccount","routeSlug":"/api-docs/openapi/account-module/updateasubaccount","metadata":{"seo":{"title":"Update a sub-account","description":"Updates an account in your own part of the hierarchy. Every field is optional; arequest with an empty body succeeds and changes nothing."}},"httpPath":"/api/v2/account/{id}"},{"label":"Delete a sub-account","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/deleteasubaccount","routeSlug":"/api-docs/openapi/account-module/deleteasubaccount","metadata":{"seo":{"title":"Delete a sub-account","description":"Removes a sub-account. The account and its records are retained rather than erased, but no endpoint restores them, so treat this as final."}},"httpPath":"/api/v2/account/{id}"},{"label":"List roles","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/listroles","routeSlug":"/api-docs/openapi/account-module/listroles","metadata":{"seo":{"title":"List roles","description":"Returns the roles belonging to the account you are calling as. Roles an account above this one has marked inheritable are not included here - each account's listing is its own."}},"httpPath":"/api/v2/account/role"},{"label":"Create a role","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/createarole","routeSlug":"/api-docs/openapi/account-module/createarole","metadata":{"seo":{"title":"Create a role","description":"Creates a role in the account you are calling as. The account is taken from thecaller and cannot be set from the request. The response is the same shape asreading the role, so a follow-up read is not needed."}},"httpPath":"/api/v2/account/role"},{"label":"Read a role","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/readarole","routeSlug":"/api-docs/openapi/account-module/readarole","metadata":{"seo":{"title":"Read a role","description":"Returns one role: its name, its code, what it is allowed to do, and any limits onthe records it may act on."}},"httpPath":"/api/v2/account/role/{id}"},{"label":"Update a role","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/updatearole","routeSlug":"/api-docs/openapi/account-module/updatearole","metadata":{"seo":{"title":"Update a role","description":"Updates a role and returns it in the same shape as reading it. Every field isoptional; a request with an empty body succeeds and changes nothing."}},"httpPath":"/api/v2/account/role/{id}"},{"label":"Delete a role","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/deletearole","routeSlug":"/api-docs/openapi/account-module/deletearole","metadata":{"seo":{"title":"Delete a role","description":"Removes a role. Anyone holding it loses it, and their active API tokens are terminated. A person left with no role at all is no longer an administrator of the account."}},"httpPath":"/api/v2/account/role/{id}"},{"label":"List the people holding a role","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/listthepeopleholdingarole","routeSlug":"/api-docs/openapi/account-module/listthepeopleholdingarole","metadata":{"seo":{"title":"List the people holding a role","description":"Returns everyone in this account who holds the role named in the URL. Each row isthe person's full record, not a membership record, with object.added_at givingthe moment they were assigned the role."}},"httpPath":"/api/v2/account/role/{role_id}/user"},{"label":"Give a person a role","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/giveapersonarole","routeSlug":"/api-docs/openapi/account-module/giveapersonarole","metadata":{"seo":{"title":"Give a person a role","description":"Assigns one person the role named in the URL. A 201 carries no body - read therole's members afterwards if you need the resulting record."}},"httpPath":"/api/v2/account/role/{role_id}/user"},{"label":"Give a role to many people","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/account-module/givearoletomanypeople","routeSlug":"/api-docs/openapi/account-module/givearoletomanypeople","metadata":{"seo":{"title":"Give a role to many people","description":"Queues the work of assigning a set of people the role named in the URL and returnsa token for the queued job. Nothing is assigned by the time the response comesback, and the token is not something you can poll - confirm the outcome bylisting the role's members."}},"httpPath":"/api/v2/account/role/{role_id}/user/mass-create"}]},{"type":"group","label":"Blog Module","link":"/api-docs/openapi/blog-module","routeSlug":"/api-docs/openapi/blog-module","items":[{"label":"List articles","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/blog-module/listarticles","routeSlug":"/api-docs/openapi/blog-module/listarticles","metadata":{"seo":{"title":"List articles","description":"Returns a paginated list of the articles the caller is allowed to read, in the current account and the accounts above it. A caller with the blog:article:read permission sees every article; anyone else sees only published ones, and an unauthenticated caller sees only articles that are both published and marked public."}},"httpPath":"/api/v2/blog/article"},{"label":"Create an article","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/blog-module/createanarticle","routeSlug":"/api-docs/openapi/blog-module/createanarticle","metadata":{"seo":{"title":"Create an article","description":"Creates an article in the current account, with the calling user recorded as its author. The response is the same shape as reading the article, so a follow-up read is not needed."}},"httpPath":"/api/v2/blog/article"},{"label":"Read an article","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/blog-module/readanarticle","routeSlug":"/api-docs/openapi/blog-module/readanarticle","metadata":{"seo":{"title":"Read an article","description":"Returns a single article. Reading also records the article as read for thecalling user the first time they fetch it, which is what populatesnice.read_at and makes nice.liked meaningful on later reads."}},"httpPath":"/api/v2/blog/article/{id}"},{"label":"Update an article","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/blog-module/updateanarticle","routeSlug":"/api-docs/openapi/blog-module/updateanarticle","metadata":{"seo":{"title":"Update an article","description":"Updates the fields supplied and leaves the rest untouched, then returns the article in the same shape as reading it. Every field is optional. Invalid input returns a 422 identifying the fields at fault."}},"httpPath":"/api/v2/blog/article/{id}"},{"label":"Delete an article","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/blog-module/deleteanarticle","routeSlug":"/api-docs/openapi/blog-module/deleteanarticle","metadata":{"seo":{"title":"Delete an article","description":"Permanently deletes the article. Its publicly accessible URL stops resolving immediately."}},"httpPath":"/api/v2/blog/article/{id}"}]},{"type":"group","label":"Training Module","link":"/api-docs/openapi/training-module","routeSlug":"/api-docs/openapi/training-module","items":[{"label":"List training modules","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/listtrainingmodules","routeSlug":"/api-docs/openapi/training-module/listtrainingmodules","metadata":{"seo":{"title":"List training modules","description":"Returns a paginated list of the training modules the current account canuse. That is the account's own modules, plus modules owned by an accountabove it in the hierarchy that are marked is_inheritable. On each item,nice.is_foreign_account says whether the module belongs to another accountand nice.acts_as_native whether an inherited one behaves as if it were thecurrent account's own."}},"httpPath":"/api/v2/training"},{"label":"Create a training module","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/createatrainingmodule","routeSlug":"/api-docs/openapi/training-module/createatrainingmodule","metadata":{"seo":{"title":"Create a training module","description":"Creates a training module in the current account. account_id is always thecalling account and cannot be set from the request, and the module's tokenis generated on create. The response is the same shape as reading themodule, so a follow-up read is not needed."}},"httpPath":"/api/v2/training"},{"label":"Read a training module","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/readatrainingmodule","routeSlug":"/api-docs/openapi/training-module/readatrainingmodule","metadata":{"seo":{"title":"Read a training module","description":"Returns a single training module."}},"httpPath":"/api/v2/training/{id}"},{"label":"Update a training module","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/updateatrainingmodule","routeSlug":"/api-docs/openapi/training-module/updateatrainingmodule","metadata":{"seo":{"title":"Update a training module","description":"Updates the fields supplied and leaves the rest untouched, then returns themodule in the same shape as reading it. Every field is optional."}},"httpPath":"/api/v2/training/{id}"},{"label":"Delete a training module","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/deleteatrainingmodule","routeSlug":"/api-docs/openapi/training-module/deleteatrainingmodule","metadata":{"seo":{"title":"Delete a training module","description":"Deletes the module and, with it, every user's assignment to and progress on it."}},"httpPath":"/api/v2/training/{id}"},{"label":"List a module's assigned users","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/listamodulesassignedusers","routeSlug":"/api-docs/openapi/training-module/listamodulesassignedusers","metadata":{"seo":{"title":"List a module's assigned users","description":"Returns the users assigned to a training module, one row per assignment,with the status and progress of each."}},"httpPath":"/api/v2/training/{training_id}/user"},{"label":"Assign a module to a user","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/assignamoduletoauser","routeSlug":"/api-docs/openapi/training-module/assignamoduletoauser","metadata":{"seo":{"title":"Assign a module to a user","description":"Assigns the training module in the URL to one user and returns the newassignment in the same shape as reading it, so a follow-up read is notneeded."}},"httpPath":"/api/v2/training/{training_id}/user"},{"label":"Assign a module to many users","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/assignamoduletomanyusers","routeSlug":"/api-docs/openapi/training-module/assignamoduletomanyusers","metadata":{"seo":{"title":"Assign a module to many users","description":"Assigns the training module in the URL to a set of users at once."}},"httpPath":"/api/v2/training/{training_id}/user"},{"label":"Read an assignment","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/readanassignment","routeSlug":"/api-docs/openapi/training-module/readanassignment","metadata":{"seo":{"title":"Read an assignment","description":"Returns one user's assignment to a training module: the status they are at,how many steps they have finished, their score, and when the completionexpires."}},"httpPath":"/api/v2/training/{training_id}/user/{id}"},{"label":"Update an assignment","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/updateanassignment","routeSlug":"/api-docs/openapi/training-module/updateanassignment","metadata":{"seo":{"title":"Update an assignment","description":"Updates the fields supplied and leaves the rest untouched, then returns theassignment in the same shape as reading it. Every field is optional and anempty body is a valid request that changes nothing."}},"httpPath":"/api/v2/training/{training_id}/user/{id}"},{"label":"Delete an assignment","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/training-module/deleteanassignment","routeSlug":"/api-docs/openapi/training-module/deleteanassignment","metadata":{"seo":{"title":"Delete an assignment","description":"Removes a user's assignment to the module, along with the progress recorded against it. There is no endpoint that restores one, so treat this as final."}},"httpPath":"/api/v2/training/{training_id}/user/{id}"}]},{"type":"group","label":"Headcount Module","link":"/api-docs/openapi/headcount-module","routeSlug":"/api-docs/openapi/headcount-module","items":[{"label":"List functional areas","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/listfunctionalareas","routeSlug":"/api-docs/openapi/headcount-module/listfunctionalareas","metadata":{"seo":{"title":"List functional areas","description":"Returns the functional areas the account holds - the groups its workforce isorganised into, each with a target headcount and the roles that sit under it."}},"httpPath":"/api/v2/headcount/functionalarea"},{"label":"Create a functional area","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/createafunctionalarea","routeSlug":"/api-docs/openapi/headcount-module/createafunctionalarea","metadata":{"seo":{"title":"Create a functional area","description":"Sets up a new group to organise the workforce into, with a target headcount and,optionally, a set of conditions that keep its membership up to date on its own."}},"httpPath":"/api/v2/headcount/functionalarea"},{"label":"Read a functional area","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/readafunctionalarea","routeSlug":"/api-docs/openapi/headcount-module/readafunctionalarea","metadata":{"seo":{"title":"Read a functional area","description":"Returns one group with its target headcount, the type it is filed under, thetraining assigned to anyone who joins it, and the conditions that maintain itsmembership if automatic updating is switched on."}},"httpPath":"/api/v2/headcount/functionalarea/{id}"},{"label":"Update a functional area","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/updateafunctionalarea","routeSlug":"/api-docs/openapi/headcount-module/updateafunctionalarea","metadata":{"seo":{"title":"Update a functional area","description":"Updates the fields supplied and returns the group in the same shape as reading it.Only the fields sent are touched, so an empty body is a valid request that changesnothing."}},"httpPath":"/api/v2/headcount/functionalarea/{id}"},{"label":"Delete a functional area","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/deleteafunctionalarea","routeSlug":"/api-docs/openapi/headcount-module/deleteafunctionalarea","metadata":{"seo":{"title":"Delete a functional area","description":"Removes the group. The record is retained internally so past reporting is not lost,but the group can no longer be read or edited and no endpoint restores it."}},"httpPath":"/api/v2/headcount/functionalarea/{id}"},{"label":"List job titles","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/listjobtitles","routeSlug":"/api-docs/openapi/headcount-module/listjobtitles","metadata":{"seo":{"title":"List job titles","description":"Returns the roles recruiting under one functional area, each with the trainingassigned to whoever takes it on."}},"httpPath":"/api/v2/headcount/functionalarea/{functionalarea_id}/jobtitle"},{"label":"Create a job title","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/createajobtitle","routeSlug":"/api-docs/openapi/headcount-module/createajobtitle","metadata":{"seo":{"title":"Create a job title","description":"Adds a role under the functional area named in the URL. The parent is taken fromthe URL, so it is not a body field and cannot be set by sending one."}},"httpPath":"/api/v2/headcount/functionalarea/{functionalarea_id}/jobtitle"},{"label":"Read a job title","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/readajobtitle","routeSlug":"/api-docs/openapi/headcount-module/readajobtitle","metadata":{"seo":{"title":"Read a job title","description":"Returns one role with its description and the training assigned to whoever takes iton. relations.functional_area carries the parent group in full, so a separate callis not needed to see which group the role belongs to."}},"httpPath":"/api/v2/headcount/functionalarea/{functionalarea_id}/jobtitle/{id}"},{"label":"Update a job title","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/updateajobtitle","routeSlug":"/api-docs/openapi/headcount-module/updateajobtitle","metadata":{"seo":{"title":"Update a job title","description":"Updates the fields supplied and returns the role in the same shape as reading it.Only the fields sent are touched, so an empty body is a valid request that changesnothing, and omitting training_ids leaves the assigned training alone rather thanclearing it."}},"httpPath":"/api/v2/headcount/functionalarea/{functionalarea_id}/jobtitle/{id}"},{"label":"Delete a job title","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/deleteajobtitle","routeSlug":"/api-docs/openapi/headcount-module/deleteajobtitle","metadata":{"seo":{"title":"Delete a job title","description":"Removes the role. The record is retained internally so past reporting is not lost,but the role can no longer be read or edited and no endpoint restores it."}},"httpPath":"/api/v2/headcount/functionalarea/{functionalarea_id}/jobtitle/{id}"},{"label":"List functional area types","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/listfunctionalareatypes","routeSlug":"/api-docs/openapi/headcount-module/listfunctionalareatypes","metadata":{"seo":{"title":"List functional area types","description":"Returns the categories the account files its functional areas under, in the ordersort_order puts them."}},"httpPath":"/api/v2/headcount/functionalarea/type"},{"label":"Create a functional area type","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/createafunctionalareatype","routeSlug":"/api-docs/openapi/headcount-module/createafunctionalareatype","metadata":{"seo":{"title":"Create a functional area type","description":"Adds a category that functional areas can be filed under. Point a functional areaat it with headcount_functional_area_type_id on the create or update endpoint forthat area."}},"httpPath":"/api/v2/headcount/functionalarea/type"},{"label":"Read a functional area type","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/readafunctionalareatype","routeSlug":"/api-docs/openapi/headcount-module/readafunctionalareatype","metadata":{"seo":{"title":"Read a functional area type","description":"Returns one category with its name and sort position."}},"httpPath":"/api/v2/headcount/functionalarea/type/{id}"},{"label":"Update a functional area type","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/updateafunctionalareatype","routeSlug":"/api-docs/openapi/headcount-module/updateafunctionalareatype","metadata":{"seo":{"title":"Update a functional area type","description":"Updates the fields supplied and returns the type in the same shape as reading it. Only the fields sent are touched, so an empty body is a valid request that changes nothing."}},"httpPath":"/api/v2/headcount/functionalarea/type/{id}"},{"label":"Delete a functional area type","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/deleteafunctionalareatype","routeSlug":"/api-docs/openapi/headcount-module/deleteafunctionalareatype","metadata":{"seo":{"title":"Delete a functional area type","description":"Removes the category. The record is retained internally so past reporting is notlost, but the type can no longer be read or edited and no endpoint restores it."}},"httpPath":"/api/v2/headcount/functionalarea/type/{id}"},{"label":"Add people to a functional area","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/addpeopletoafunctionalarea","routeSlug":"/api-docs/openapi/headcount-module/addpeopletoafunctionalarea","metadata":{"seo":{"title":"Add people to a functional area","description":"Adds a list of people to the functional area named in the URL, all with the samemembership status. The work is queued rather than done while you wait, so a 200means the request was accepted, not that anyone has been added yet."}},"httpPath":"/api/v2/headcount/functionalarea/{functionalarea_id}/user/mass-create"},{"label":"List locations","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/listlocations","routeSlug":"/api-docs/openapi/headcount-module/listlocations","metadata":{"seo":{"title":"List locations","description":"Returns the locations the account holds - the places it recruits and rosters peopleto, each of which groups one or more venues."}},"httpPath":"/api/v2/headcount/location"},{"label":"Create a location","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/createalocation","routeSlug":"/api-docs/openapi/headcount-module/createalocation","metadata":{"seo":{"title":"Create a location","description":"Sets up a new place to recruit and roster people to. Venues are then created underit, and roles are advertised against those venues rather than against the locationitself."}},"httpPath":"/api/v2/headcount/location"},{"label":"Read a location","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/readalocation","routeSlug":"/api-docs/openapi/headcount-module/readalocation","metadata":{"seo":{"title":"Read a location","description":"Returns one location with its code, the type it is filed under and the trainingassigned to anyone who accepts a role there."}},"httpPath":"/api/v2/headcount/location/{id}"},{"label":"Update a location","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/updatealocation","routeSlug":"/api-docs/openapi/headcount-module/updatealocation","metadata":{"seo":{"title":"Update a location","description":"Updates the fields supplied and returns the location in the same shape as reading it. Only the fields sent are touched, so an empty body is a valid request that changes nothing."}},"httpPath":"/api/v2/headcount/location/{id}"},{"label":"Delete a location","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/deletealocation","routeSlug":"/api-docs/openapi/headcount-module/deletealocation","metadata":{"seo":{"title":"Delete a location","description":"Removes the location. The record is retained internally so past reporting is notlost, but the location can no longer be read or edited and no endpoint restores it."}},"httpPath":"/api/v2/headcount/location/{id}"},{"label":"List a location's venues","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/listalocationsvenues","routeSlug":"/api-docs/openapi/headcount-module/listalocationsvenues","metadata":{"seo":{"title":"List a location's venues","description":"Returns the venues filed under one location - the addressable places within it thatroles are advertised at."}},"httpPath":"/api/v2/headcount/location/{location_id}/venue"},{"label":"Create a venue","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/createavenue","routeSlug":"/api-docs/openapi/headcount-module/createavenue","metadata":{"seo":{"title":"Create a venue","description":"Adds an addressable place under the location in the path. Roles are advertisedagainst venues rather than against the location itself, so a location needs at leastone before it can be recruited for."}},"httpPath":"/api/v2/headcount/location/{location_id}/venue"},{"label":"Read a venue","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/readavenue","routeSlug":"/api-docs/openapi/headcount-module/readavenue","metadata":{"seo":{"title":"Read a venue","description":"Returns one venue with its address, the training assigned to anyone who accepts arole there, and the location it belongs to. nice carries the address pre-formattedfor display, both as a block and on one line."}},"httpPath":"/api/v2/headcount/location/{location_id}/venue/{id}"},{"label":"Update a venue","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/updateavenue","routeSlug":"/api-docs/openapi/headcount-module/updateavenue","metadata":{"seo":{"title":"Update a venue","description":"Updates the fields supplied and returns the venue. Only the fields sent are touched,so an empty body is a valid request that changes nothing."}},"httpPath":"/api/v2/headcount/location/{location_id}/venue/{id}"},{"label":"Delete a venue","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/deleteavenue","routeSlug":"/api-docs/openapi/headcount-module/deleteavenue","metadata":{"seo":{"title":"Delete a venue","description":"Removes the venue. The record is retained internally so past reporting is not lost,but the venue can no longer be read or edited and no endpoint restores it."}},"httpPath":"/api/v2/headcount/location/{location_id}/venue/{id}"},{"label":"List location types","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/listlocationtypes","routeSlug":"/api-docs/openapi/headcount-module/listlocationtypes","metadata":{"seo":{"title":"List location types","description":"Returns the categories the account files its locations under, in the ordersort_order puts them."}},"httpPath":"/api/v2/headcount/location/type"},{"label":"Create a location type","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/createalocationtype","routeSlug":"/api-docs/openapi/headcount-module/createalocationtype","metadata":{"seo":{"title":"Create a location type","description":"Adds a category that locations can be filed under. Point a location at it withheadcount_location_type_id on the create or update endpoint for that location."}},"httpPath":"/api/v2/headcount/location/type"},{"label":"Read a location type","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/readalocationtype","routeSlug":"/api-docs/openapi/headcount-module/readalocationtype","metadata":{"seo":{"title":"Read a location type","description":"Returns one category with its name and sort position."}},"httpPath":"/api/v2/headcount/location/type/{id}"},{"label":"Update a location type","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/updatealocationtype","routeSlug":"/api-docs/openapi/headcount-module/updatealocationtype","metadata":{"seo":{"title":"Update a location type","description":"Updates the fields supplied and returns the type in the same shape as reading it. Only the fields sent are touched, so an empty body is a valid request that changes nothing."}},"httpPath":"/api/v2/headcount/location/type/{id}"},{"label":"Delete a location type","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/headcount-module/deletealocationtype","routeSlug":"/api-docs/openapi/headcount-module/deletealocationtype","metadata":{"seo":{"title":"Delete a location type","description":"Removes the category. The record is retained internally so past reporting is notlost, but the type can no longer be read or edited and no endpoint restores it."}},"httpPath":"/api/v2/headcount/location/type/{id}"}]},{"type":"group","label":"Inventory Module","link":"/api-docs/openapi/inventory-module","routeSlug":"/api-docs/openapi/inventory-module","items":[{"label":"List inventory items","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/listinventoryitems","routeSlug":"/api-docs/openapi/inventory-module/listinventoryitems","metadata":{"seo":{"title":"List inventory items","description":"Returns the items in the account's catalogue - the things that can be allocated to people, such as uniforms, equipment and redeemable rewards."}},"httpPath":"/api/v2/inventory/item"},{"label":"Create an inventory item","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/createaninventoryitem","routeSlug":"/api-docs/openapi/inventory-module/createaninventoryitem","metadata":{"seo":{"title":"Create an inventory item","description":"Adds an item to the account's catalogue and returns it."}},"httpPath":"/api/v2/inventory/item"},{"label":"Read an inventory item","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/readaninventoryitem","routeSlug":"/api-docs/openapi/inventory-module/readaninventoryitem","metadata":{"seo":{"title":"Read an inventory item","description":"Returns one item from the catalogue, with its stock settings, how it may beobtained, and what happens when it is allocated."}},"httpPath":"/api/v2/inventory/item/{id}"},{"label":"Update an inventory item","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/updateaninventoryitem","routeSlug":"/api-docs/openapi/inventory-module/updateaninventoryitem","metadata":{"seo":{"title":"Update an inventory item","description":"Updates the fields supplied and returns the item in the same shape as readingit."}},"httpPath":"/api/v2/inventory/item/{id}"},{"label":"Delete an inventory item","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/deleteaninventoryitem","routeSlug":"/api-docs/openapi/inventory-module/deleteaninventoryitem","metadata":{"seo":{"title":"Delete an inventory item","description":"Removes the item from the catalogue. The record is retained internally, so existing allocations and past reporting are not lost, but the item can no longer be allocated and no endpoint restores it."}},"httpPath":"/api/v2/inventory/item/{id}"},{"label":"Allocate an item to a person","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/allocateanitemtoaperson","routeSlug":"/api-docs/openapi/inventory-module/allocateanitemtoaperson","metadata":{"seo":{"title":"Allocate an item to a person","description":"Gives one unit of the item in the URL to one person and returns the allocation."}},"httpPath":"/api/v2/inventory/item/{item_id}/user"},{"label":"Read an allocation","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/readanallocation","routeSlug":"/api-docs/openapi/inventory-module/readanallocation","metadata":{"seo":{"title":"Read an allocation","description":"Returns one allocation of an item to a person: when it was given, when it was collected, when it expires, and which serial was assigned if the item carries them."}},"httpPath":"/api/v2/inventory/item/{item_id}/user/{id}"},{"label":"Update an allocation","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/updateanallocation","routeSlug":"/api-docs/openapi/inventory-module/updateanallocation","metadata":{"seo":{"title":"Update an allocation","description":"Updates the fields supplied and leaves the rest untouched, then returns theallocation in the same shape as reading it. Every field is optional."}},"httpPath":"/api/v2/inventory/item/{item_id}/user/{id}"},{"label":"Delete an allocation","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/deleteanallocation","routeSlug":"/api-docs/openapi/inventory-module/deleteanallocation","metadata":{"seo":{"title":"Delete an allocation","description":"Takes the item back from the person. The record is retained internally so past reporting is not lost, and no endpoint restores it."}},"httpPath":"/api/v2/inventory/item/{item_id}/user/{id}"},{"label":"Allocate an item to many people","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/allocateanitemtomanypeople","routeSlug":"/api-docs/openapi/inventory-module/allocateanitemtomanypeople","metadata":{"seo":{"title":"Allocate an item to many people","description":"Allocates one item to a set of people in a single call. The work is queuedrather than done while you wait, so a 200 means the request was accepted, notthat anyone has been allocated anything yet."}},"httpPath":"/api/v2/inventory/item/user/mass-add-item-to-users"},{"label":"Mark allocations as collected","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/markallocationsascollected","routeSlug":"/api-docs/openapi/inventory-module/markallocationsascollected","metadata":{"seo":{"title":"Mark allocations as collected","description":"Records that items already allocated to people have now been handed over,several at once. This is the counterpart to setting collected_at on a singleallocation, and it also records who handed the item over."}},"httpPath":"/api/v2/inventory/item/user/collect"},{"label":"Create an allocation rule","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/createanallocationrule","routeSlug":"/api-docs/openapi/inventory-module/createanallocationrule","metadata":{"seo":{"title":"Create an allocation rule","description":"Sets up a rule that hands items out on its own: it names a thing to measure -shifts worked, events attended, hours attended - and a threshold, and everyonewho reaches that threshold is given the items attached to the rule. Attach thoseitems with the create endpoint on the rule's own item list; a rule with no itemsis valid and does nothing."}},"httpPath":"/api/v2/inventory/allocation"},{"label":"Read an allocation rule","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/readanallocationrule","routeSlug":"/api-docs/openapi/inventory-module/readanallocationrule","metadata":{"seo":{"title":"Read an allocation rule","description":"Returns one rule with its qualifying condition and the items it hands out."}},"httpPath":"/api/v2/inventory/allocation/{id}"},{"label":"Update an allocation rule","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/updateanallocationrule","routeSlug":"/api-docs/openapi/inventory-module/updateanallocationrule","metadata":{"seo":{"title":"Update an allocation rule","description":"Updates the fields supplied and returns the rule in the same shape as readingit. Only the fields sent are touched, so an empty body is a valid request thatchanges nothing, and omitting rules leaves the qualifying condition alonerather than clearing it."}},"httpPath":"/api/v2/inventory/allocation/{id}"},{"label":"Delete an allocation rule","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/deleteanallocationrule","routeSlug":"/api-docs/openapi/inventory-module/deleteanallocationrule","metadata":{"seo":{"title":"Delete an allocation rule","description":"Stops the rule handing anything else out. The record is retained internally so past reporting is not lost, but the rule can no longer be read or edited and no endpoint restores it."}},"httpPath":"/api/v2/inventory/allocation/{id}"},{"label":"Add an item to an allocation rule","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/addanitemtoanallocationrule","routeSlug":"/api-docs/openapi/inventory-module/addanitemtoanallocationrule","metadata":{"seo":{"title":"Add an item to an allocation rule","description":"Adds a catalogue item to the list a rule hands out, so that everyone who meetsthe rule's condition receives it. A rule can hand out several different items;add each one separately."}},"httpPath":"/api/v2/inventory/allocation/{allocation_id}/item"},{"label":"Read an item on an allocation rule","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/readanitemonanallocationrule","routeSlug":"/api-docs/openapi/inventory-module/readanitemonanallocationrule","metadata":{"seo":{"title":"Read an item on an allocation rule","description":"Returns one line from a rule's item list: which catalogue item it gives out, how many, and how long the allocation stays valid."}},"httpPath":"/api/v2/inventory/allocation/{allocation_id}/item/{id}"},{"label":"Update an item on an allocation rule","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/updateanitemonanallocationrule","routeSlug":"/api-docs/openapi/inventory-module/updateanitemonanallocationrule","metadata":{"seo":{"title":"Update an item on an allocation rule","description":"Updates the fields supplied and returns the line in the same shape as readingit. Only the fields sent are touched."}},"httpPath":"/api/v2/inventory/allocation/{allocation_id}/item/{id}"},{"label":"Remove an item from an allocation rule","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/inventory-module/removeanitemfromanallocationrule","routeSlug":"/api-docs/openapi/inventory-module/removeanitemfromanallocationrule","metadata":{"seo":{"title":"Remove an item from an allocation rule","description":"Takes the item off the rule's list so it is no longer handed out. This ispermanent - the line is removed outright rather than retained, and no endpointrestores it."}},"httpPath":"/api/v2/inventory/allocation/{allocation_id}/item/{id}"}]},{"type":"group","label":"Report Module","link":"/api-docs/openapi/report-module","routeSlug":"/api-docs/openapi/report-module","items":[{"label":"List reports","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/report-module/listreports","routeSlug":"/api-docs/openapi/report-module/listreports","metadata":{"seo":{"title":"List reports","description":"Returns a paginated list of the current account's reports. A report whose owner has been deleted is omitted from this listing."}},"httpPath":"/api/v2/report"},{"label":"Create a report","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/report-module/createareport","routeSlug":"/api-docs/openapi/report-module/createareport","metadata":{"seo":{"title":"Create a report","description":"Creates a report definition and, unless it is scheduled, immediately queues itfor generation - so a 201 means the report exists, not that the file is ready.Poll the report until status becomes completed, then use the download endpoint.A scheduled report is stored with status scheduled and is not run now."}},"httpPath":"/api/v2/report"},{"label":"Read a report","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/report-module/readareport","routeSlug":"/api-docs/openapi/report-module/readareport","metadata":{"seo":{"title":"Read a report","description":"Returns a single report's definition and current generation state. status movesthrough queued, processing and then completed or failed, and last_generated_atand file_path are only populated once a run has finished - use the downloadendpoint to obtain a link rather than reading file_path directly."}},"httpPath":"/api/v2/report/{id}"},{"label":"Update a report","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/report-module/updateareport","routeSlug":"/api-docs/openapi/report-module/updateareport","metadata":{"seo":{"title":"Update a report","description":"Updates the fields supplied and leaves the rest untouched, then returns thereport in the same shape as reading it. Every field is optional."}},"httpPath":"/api/v2/report/{id}"},{"label":"Delete a report","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/report-module/deleteareport","routeSlug":"/api-docs/openapi/report-module/deleteareport","metadata":{"seo":{"title":"Delete a report","description":"Deletes the report definition, its schedule and the record of any file it has generated."}},"httpPath":"/api/v2/report/{id}"}]},{"type":"group","label":"Role Offer Module","link":"/api-docs/openapi/role-offer-module","routeSlug":"/api-docs/openapi/role-offer-module","items":[{"label":"List role offers","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/listroleoffers","routeSlug":"/api-docs/openapi/role-offer-module/listroleoffers","metadata":{"seo":{"title":"List role offers","description":"Returns the account's role offers. Pass a page parameter to receive a paginatedenvelope; without one, every matching role offer is returned as a flat array."}},"httpPath":"/api/v2/headcount/roleoffer"},{"label":"Create a role offer","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/createaroleoffer","routeSlug":"/api-docs/openapi/role-offer-module/createaroleoffer","metadata":{"seo":{"title":"Create a role offer","description":"Creates a role offer and returns it in the same shape as reading one, so afollow-up read is not needed. A role offer is unique on the combination of jobtitle and venue; reusing a pair that already has one is refused."}},"httpPath":"/api/v2/headcount/roleoffer"},{"label":"Read a role offer","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/readaroleoffer","routeSlug":"/api-docs/openapi/role-offer-module/readaroleoffer","metadata":{"seo":{"title":"Read a role offer","description":"Returns one role offer's configuration, the human-readable form of each of itsvalues, and what the calling user is permitted to do with it."}},"httpPath":"/api/v2/headcount/roleoffer/{id}"},{"label":"Update a role offer","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/updatearoleoffer","routeSlug":"/api-docs/openapi/role-offer-module/updatearoleoffer","metadata":{"seo":{"title":"Update a role offer","description":"Updates a role offer and returns it in the same shape as reading one. Every fieldis optional; only the fields sent are changed, with the exceptions below."}},"httpPath":"/api/v2/headcount/roleoffer/{id}"},{"label":"Delete a role offer","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/deletearoleoffer","routeSlug":"/api-docs/openapi/role-offer-module/deletearoleoffer","metadata":{"seo":{"title":"Delete a role offer","description":"Deletes a role offer. Unlike most deletes this returns 200 with a messages body rather than an empty 204; messages is null when there was nothing to report."}},"httpPath":"/api/v2/headcount/roleoffer/{id}"},{"label":"List a role offer's applications","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/listaroleoffersapplications","routeSlug":"/api-docs/openapi/role-offer-module/listaroleoffersapplications","metadata":{"seo":{"title":"List a role offer's applications","description":"Returns the people who have applied to, or been added to, the role offer inthe URL - one row per application, carrying the status each is at."}},"httpPath":"/api/v2/headcount/roleoffer/{roleoffer_id}/user"},{"label":"Add a user to a role offer","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/addausertoaroleoffer","routeSlug":"/api-docs/openapi/role-offer-module/addausertoaroleoffer","metadata":{"seo":{"title":"Add a user to a role offer","description":"Creates an application for one person against the role offer in the URL, at thestatus you name, and returns it."}},"httpPath":"/api/v2/headcount/roleoffer/{roleoffer_id}/user"},{"label":"Add many users to a role offer","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/addmanyuserstoaroleoffer","routeSlug":"/api-docs/openapi/role-offer-module/addmanyuserstoaroleoffer","metadata":{"seo":{"title":"Add many users to a role offer","description":"Adds a set of people to the role offer in the URL at once."}},"httpPath":"/api/v2/headcount/roleoffer/{roleoffer_id}/user"},{"label":"Read an application","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/readanapplication","routeSlug":"/api-docs/openapi/role-offer-module/readanapplication","metadata":{"seo":{"title":"Read an application","description":"Returns one person's application to a role offer: the status it is at, whenthat status last changed, whether it is a secondary or a reserved place, andany note recorded against it."}},"httpPath":"/api/v2/headcount/roleoffer/{roleoffer_id}/user/{id}"},{"label":"Update an application","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/updateanapplication","routeSlug":"/api-docs/openapi/role-offer-module/updateanapplication","metadata":{"seo":{"title":"Update an application","description":"Moves an application to a new status, and optionally records a note or changeswhether it is a secondary or a reserved place. Returns the application in thesame shape as reading it."}},"httpPath":"/api/v2/headcount/roleoffer/{roleoffer_id}/user/{id}"},{"label":"Delete an application","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/role-offer-module/deleteanapplication","routeSlug":"/api-docs/openapi/role-offer-module/deleteanapplication","metadata":{"seo":{"title":"Delete an application","description":"Removes a person's application to the role offer, freeing the place it occupied and freeing that person to be added to the role offer again."}},"httpPath":"/api/v2/headcount/roleoffer/{roleoffer_id}/user/{id}"}]},{"type":"group","label":"Event Module","link":"/api-docs/openapi/event-module","routeSlug":"/api-docs/openapi/event-module","items":[{"label":"List events","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/event-module/listevents","routeSlug":"/api-docs/openapi/event-module/listevents","metadata":{"seo":{"title":"List events","description":"Returns the events in the account you are calling as."}},"httpPath":"/api/v2/event"},{"label":"Create an event","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/event-module/createanevent","routeSlug":"/api-docs/openapi/event-module/createanevent","metadata":{"seo":{"title":"Create an event","description":"Creates an event in the account you are calling as. The response is the same shapeas reading the event back, so a follow-up read is not needed."}},"httpPath":"/api/v2/event"},{"label":"Read an event","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/event-module/readanevent","routeSlug":"/api-docs/openapi/event-module/readanevent","metadata":{"seo":{"title":"Read an event","description":"Returns one event: when and where it runs, when applications open and close, whomay see it, and the defaults every shift beneath it inherits - the statuses anapplication moves through, the forms it collects, the check-in window and thelimits on how many shifts one person may hold."}},"httpPath":"/api/v2/event/{id}"},{"label":"Update an event","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/event-module/updateanevent","routeSlug":"/api-docs/openapi/event-module/updateanevent","metadata":{"seo":{"title":"Update an event","description":"Updates an event and returns it, the same shape as reading it. Every field isoptional; a request with an empty body succeeds and changes nothing."}},"httpPath":"/api/v2/event/{id}"},{"label":"Delete an event","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/event-module/deleteanevent","routeSlug":"/api-docs/openapi/event-module/deleteanevent","metadata":{"seo":{"title":"Delete an event","description":"Removes an event. The record is retained rather than erased, but no endpointrestores it, so treat this as final."}},"httpPath":"/api/v2/event/{id}"}]},{"type":"group","label":"Shift Module","link":"/api-docs/openapi/shift-module","routeSlug":"/api-docs/openapi/shift-module","items":[{"label":"List shift assignments","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/listshiftassignments","routeSlug":"/api-docs/openapi/shift-module/listshiftassignments","metadata":{"seo":{"title":"List shift assignments","description":"Returns one row per person-on-a-shift, carrying the status they are at and thetimes they checked in and out."}},"httpPath":"/api/v2/event/{event_id}/shift/{shift_id}/user"},{"label":"Put a person on a shift","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/putapersononashift","routeSlug":"/api-docs/openapi/shift-module/putapersononashift","metadata":{"seo":{"title":"Put a person on a shift","description":"Creates one assignment against the shift in the URL, at the status you name, andreturns it."}},"httpPath":"/api/v2/event/{event_id}/shift/{shift_id}/user"},{"label":"Read a shift assignment","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/readashiftassignment","routeSlug":"/api-docs/openapi/shift-module/readashiftassignment","metadata":{"seo":{"title":"Read a shift assignment","description":"Returns one person's place on one shift: the status they are at, the times they checked in and out, the break they took, any rating recorded, and the account's own configured attributes for an assignment."}},"httpPath":"/api/v2/event/{event_id}/shift/{shift_id}/user/{id}"},{"label":"Update a shift assignment","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/updateashiftassignment","routeSlug":"/api-docs/openapi/shift-module/updateashiftassignment","metadata":{"seo":{"title":"Update a shift assignment","description":"Moves an assignment to a new status, or records the check-in and check-out times,break, demand, rating or note against it. Returns the assignment in the sameshape as reading it."}},"httpPath":"/api/v2/event/{event_id}/shift/{shift_id}/user/{id}"},{"label":"Take a person off a shift","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/takeapersonoffashift","routeSlug":"/api-docs/openapi/shift-module/takeapersonoffashift","metadata":{"seo":{"title":"Take a person off a shift","description":"Removes one assignment. The person and the shift are both left alone; only theirplace on it goes."}},"httpPath":"/api/v2/event/{event_id}/shift/{shift_id}/user/{id}"},{"label":"List shift assignments","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/listallshiftassignments","routeSlug":"/api-docs/openapi/shift-module/listallshiftassignments","metadata":{"seo":{"title":"List shift assignments","description":"Returns one row per person-on-a-shift, carrying the status they are at and thetimes they checked in and out."}},"httpPath":"/api/v2/event/shift/user"},{"label":"Add many people to a shift","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/addmanypeopletoashift","routeSlug":"/api-docs/openapi/shift-module/addmanypeopletoashift","metadata":{"seo":{"title":"Add many people to a shift","description":"Queues the work of putting a set of people on one shift and returns a token forthe queued job. Nothing is created by the time the response comes back, andthe token is not something you can poll - confirm the outcome by listing theshift's assignments."}},"httpPath":"/api/v2/event/{event_id}/shift/{shift_id}/user/mass-create"},{"label":"Add many people to a shift","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/addmanypeopletoashiftbyquery","routeSlug":"/api-docs/openapi/shift-module/addmanypeopletoashiftbyquery","metadata":{"seo":{"title":"Add many people to a shift","description":"Queues the work of putting a set of people on one shift and returns a token forthe queued job. Nothing is created by the time the response comes back, andthe token is not something you can poll - confirm the outcome by listing theshift's assignments."}},"httpPath":"/api/v2/event/{event_id}/shift/user/mass-create"},{"label":"Remove many people from shifts","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/removemanypeoplefromshifts","routeSlug":"/api-docs/openapi/shift-module/removemanypeoplefromshifts","metadata":{"seo":{"title":"Remove many people from shifts","description":"Queues the work of removing a set of assignments and returns a token for thequeued job. Nothing is removed by the time the response comes back, and thetoken is not something you can poll - confirm the outcome by listing the shift'sassignments."}},"httpPath":"/api/v2/event/shift/user/mass-delete"},{"label":"Apply for several shifts at once","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/applyforseveralshiftsatonce","routeSlug":"/api-docs/openapi/shift-module/applyforseveralshiftsatonce","metadata":{"seo":{"title":"Apply for several shifts at once","description":"Puts the signed-in person on every shift in the body. This is what the cart submitswhen someone has finished choosing shifts, and it is the endpoint that actuallycreates the applications - the check that runs as each shift goes into the cartdoes not."}},"httpPath":"/api/v2/event/shift/apply-all"},{"label":"Check a shift's application form","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/checkashiftsapplicationform","routeSlug":"/api-docs/openapi/shift-module/checkashiftsapplicationform","metadata":{"seo":{"title":"Check a shift's application form","description":"Runs the answers to a shift's application form through that form's own rules andreturns the values it accepted."}},"httpPath":"/api/v2/event/shift/{shift_id}/submit-application"},{"label":"List the shifts in a series","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/listtheshiftsinaseries","routeSlug":"/api-docs/openapi/shift-module/listtheshiftsinaseries","metadata":{"seo":{"title":"List the shifts in a series","description":"Returns the shifts that belong to one shift link, a page at a time. This ishow you see what a repeating shift actually turned into: every occurrence the seriesgenerated, each a full shift with its own times, demand figures, location and statuses."}},"httpPath":"/api/v2/event/{event_id}/shift/link/{link_id}/shift"},{"label":"Read a shift link","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/readashiftlink","routeSlug":"/api-docs/openapi/shift-module/readashiftlink","metadata":{"seo":{"title":"Read a shift link","description":"Returns one shift link. A shift link is the series a repeating shift belongs to - thething that makes a run of Saturday shifts one recurring commitment rather than a dozenunrelated ones. It holds the names the series is known by and the pattern its shiftswere generated from; the shifts themselves are read from the listing below."}},"httpPath":"/api/v2/event/{event_id}/shift/link/{id}"},{"label":"Update a shift link","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/updateashiftlink","routeSlug":"/api-docs/openapi/shift-module/updateashiftlink","metadata":{"seo":{"title":"Update a shift link","description":"Renames a shift link and returns it. Only the two names can be changed here - the repeatthe series was built on is fixed once its shifts exist, and the shifts themselves arechanged through the shift endpoints."}},"httpPath":"/api/v2/event/{event_id}/shift/link/{id}"},{"label":"Delete a shift link","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/deleteashiftlink","routeSlug":"/api-docs/openapi/shift-module/deleteashiftlink","metadata":{"seo":{"title":"Delete a shift link","description":"Breaks up a series. The shifts that belonged to it are not deleted - they stay on theevent exactly as they were, and simply stop being part of a series, so anyone rosteredonto them keeps their place."}},"httpPath":"/api/v2/event/{event_id}/shift/link/{id}"},{"label":"Check a shift before adding it to the cart","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/checkashiftbeforeaddingittothecart","routeSlug":"/api-docs/openapi/shift-module/checkashiftbeforeaddingittothecart","metadata":{"seo":{"title":"Check a shift before adding it to the cart","description":"Asks whether you can take this shift, given the shifts already in your cart.Nothing is applied for and nothing is stored - this is the check the portal runs asa shift goes into the cart, so that a shift you cannot take is refused there ratherthan at the end."}},"httpPath":"/api/v2/event/{event_id}/shift/{shift_id}/add-to-cart"},{"label":"Cancel a shift","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/cancelashift","routeSlug":"/api-docs/openapi/shift-module/cancelashift","metadata":{"seo":{"title":"Cancel a shift","description":"Calls the shift off. It is marked as cancelled, it stops being published, andeveryone holding a place on it is moved to a cancelled status - which is whattriggers whatever your account has set up to tell them."}},"httpPath":"/api/v2/event/{event_id}/shift/{shift_id}/cancel"},{"label":"Update many shifts at once","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/updatemanyshiftsatonce","routeSlug":"/api-docs/openapi/shift-module/updatemanyshiftsatonce","metadata":{"seo":{"title":"Update many shifts at once","description":"Queues the work of applying one set of changes to many shifts and returns a tokenfor the queued job. Nothing has changed by the time the response comes back,and the token is not something you can poll - read the shifts back to confirm."}},"httpPath":"/api/v2/event/{event_id}/shift"},{"label":"List an event's shifts","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/listaneventsshifts","routeSlug":"/api-docs/openapi/shift-module/listaneventsshifts","metadata":{"seo":{"title":"List an event's shifts","description":"Returns the shifts belonging to one event, with the demand figures for each andwhat the caller is allowed to do with it."}},"httpPath":"/api/v2/event/{event_id}/shift"},{"label":"Create a shift","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/createashift","routeSlug":"/api-docs/openapi/shift-module/createashift","metadata":{"seo":{"title":"Create a shift","description":"Adds a shift to an event and returns it. The created shift carries only the fieldsthe create set, so it is a smaller object than the one a read returns - read itback if you need the whole record."}},"httpPath":"/api/v2/event/{event_id}/shift"},{"label":"Read a shift","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/readashift","routeSlug":"/api-docs/openapi/shift-module/readashift","metadata":{"seo":{"title":"Read a shift","description":"Returns one shift with its times, demand figures, location and the settings thatgovern applying, checking in and checking out."}},"httpPath":"/api/v2/event/{event_id}/shift/{id}"},{"label":"Update a shift","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/updateashift","routeSlug":"/api-docs/openapi/shift-module/updateashift","metadata":{"seo":{"title":"Update a shift","description":"Changes one shift and returns it. Every field is optional; send only what you arechanging."}},"httpPath":"/api/v2/event/{event_id}/shift/{id}"},{"label":"Delete a shift","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/shift-module/deleteashift","routeSlug":"/api-docs/openapi/shift-module/deleteashift","metadata":{"seo":{"title":"Delete a shift","description":"Removes a shift from the event."}},"httpPath":"/api/v2/event/{event_id}/shift/{id}"}]},{"type":"group","label":"Reward Point","link":"/api-docs/openapi/reward-point","routeSlug":"/api-docs/openapi/reward-point","items":[{"label":"Read a reward point balance","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/reward-point/readarewardpointbalance","routeSlug":"/api-docs/openapi/reward-point/readarewardpointbalance","metadata":{"seo":{"title":"Read a reward point balance","description":"Returns one user's reward point balance: how many points they hold now, andwho they belong to."}},"httpPath":"/api/v2/reward-point/user/{id}"}]},{"type":"group","label":"Automatic Rostering","link":"/api-docs/openapi/automatic-rostering","routeSlug":"/api-docs/openapi/automatic-rostering","items":[{"label":"Roster people onto shifts","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/automatic-rostering/rosterpeopleontoshifts","routeSlug":"/api-docs/openapi/automatic-rostering/rosterpeopleontoshifts","metadata":{"seo":{"title":"Roster people onto shifts","description":"Fills a set of an event's shifts from a pool of people - a user group, theaccepted applicants of a role offer, or an uploaded file - creating a shiftapplication for each person placed."}},"httpPath":"/api/v2/automatic-rostering/event-shift"}]},{"type":"group","label":"Utilities","link":"/api-docs/openapi/utilities","routeSlug":"/api-docs/openapi/utilities","items":[{"label":"Read an option set","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/utilities/readanoptionset","routeSlug":"/api-docs/openapi/utilities/readanoptionset","metadata":{"seo":{"title":"Read an option set","description":"Returns the values a given field accepts, as a flat list of value and textpairs. value is what you send back on a write; text is the label the samething is shown under in the console. Use this instead of hard-coding IDs, whichdiffer from one account to the next."}},"httpPath":"/api/v2/helpers/source/{module}"}]},{"type":"group","label":"Form Module","link":"/api-docs/openapi/form-module","routeSlug":"/api-docs/openapi/form-module","items":[{"label":"List forms","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/listforms","routeSlug":"/api-docs/openapi/form-module/listforms","metadata":{"seo":{"title":"List forms","description":"Returns the forms in the account you are calling as, together with the forms itinherits from the accounts above it."}},"httpPath":"/api/v2/form"},{"label":"Create a form","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/createaform","routeSlug":"/api-docs/openapi/form-module/createaform","metadata":{"seo":{"title":"Create a form","description":"Creates an empty form in the account you are calling as. The response is thecreated form, carrying only the fields the create set - read it back withGET /form/{id} for the full shape."}},"httpPath":"/api/v2/form"},{"label":"Update a form","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/updateaform","routeSlug":"/api-docs/openapi/form-module/updateaform","metadata":{"seo":{"title":"Update a form","description":"Updates a form's settings and returns it, the same shape as reading it back.Fields you leave out keep their current values, so a partial body is safe."}},"httpPath":"/api/v2/form/{id}"},{"label":"Delete a form","deprecated":false,"httpVerb":"delete","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/deleteaform","routeSlug":"/api-docs/openapi/form-module/deleteaform","metadata":{"seo":{"title":"Delete a form","description":"Deletes a form. Its fields and its submissions go with it."}},"httpPath":"/api/v2/form/{id}"},{"label":"Render a form","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/renderaform","routeSlug":"/api-docs/openapi/form-module/renderaform","metadata":{"seo":{"title":"Render a form","description":"Returns everything needed to draw a form and fill it in: its fields in order, eachone's type, label, validation bounds and option list, the title and the contentshown on success, and the values already held for whoever is asking. Submit theresult to POST /form/{id}/process."}},"httpPath":"/api/v2/form/{form_id}/view"},{"label":"Submit a form","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/submitaform","routeSlug":"/api-docs/openapi/form-module/submitaform","metadata":{"seo":{"title":"Submit a form","description":"Submits the form returned by GET /form/{id}/view, filled in by whoever iscalling. What it creates depends on the form's type: a user, an update to thecaller, or a submission stored on its own."}},"httpPath":"/api/v2/form/{form_id}/process"},{"label":"Render a form about a user","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/renderaformaboutauser","routeSlug":"/api-docs/openapi/form-module/renderaformaboutauser","metadata":{"seo":{"title":"Render a form about a user","description":"Returns a form drawn for an administrator to complete about somebody else, withthe fields already carrying that user's current values. Submit the result toPUT /form/{id}/interact/{user_id}."}},"httpPath":"/api/v2/form/{form_id}/interact/{user_id}"},{"label":"Submit a form about a user","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/submitaformaboutauser","routeSlug":"/api-docs/openapi/form-module/submitaformaboutauser","metadata":{"seo":{"title":"Submit a form about a user","description":"Submits the form returned by GET /form/{id}/interact/{user_id}, completed by anadministrator about the user in the path. The caller must be able to change thatuser; otherwise the endpoint answers as though it does not exist."}},"httpPath":"/api/v2/form/{form_id}/interact/{user_id}"},{"label":"Copy a form","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/copyaform","routeSlug":"/api-docs/openapi/form-module/copyaform","metadata":{"seo":{"title":"Copy a form","description":"Duplicates a form, along with its fields and its visibility rules, and returns thecopy. Submissions are not copied."}},"httpPath":"/api/v2/form/{form_id}/copy"},{"label":"Export a form's responses","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/exportaformsresponses","routeSlug":"/api-docs/openapi/form-module/exportaformsresponses","metadata":{"seo":{"title":"Export a form's responses","description":"Queues an export of every response to a form and returns a token identifying thequeued job. The file is not in the response - the export is built in thebackground and delivered through the account's usual export delivery, so nothinghere needs polling."}},"httpPath":"/api/v2/form/{form_id}/export-responses"},{"label":"List a form's anonymous submissions","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/listaformsanonymoussubmissions","routeSlug":"/api-docs/openapi/form-module/listaformsanonymoussubmissions","metadata":{"seo":{"title":"List a form's anonymous submissions","description":"Returns the answers left on an anonymous form - the type that can be filled inwithout signing in. Each row carries the answers as a data object keyed by thefield names the form renders, and nothing identifying who left them, becausenobody signed in to leave them."}},"httpPath":"/api/v2/form/{form_id}/submission"},{"label":"List a user's form submissions","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/listausersformsubmissions","routeSlug":"/api-docs/openapi/form-module/listausersformsubmissions","metadata":{"seo":{"title":"List a user's form submissions","description":"Returns every form submission held against one person, across all of the account'sforms. Each row carries the raw answers in object, the same answers rendered fordisplay in nice, and the definition of each field in attributes, so a listingcan be shown without reading the form the answers came from."}},"httpPath":"/api/v2/user/{user_id}/form/user-submission"},{"label":"Update a user's form submissions in bulk","deprecated":false,"httpVerb":"put","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/api-docs/openapi/form-module/updateausersformsubmissionsinbulk","routeSlug":"/api-docs/openapi/form-module/updateausersformsubmissionsinbulk","metadata":{"seo":{"title":"Update a user's form submissions in bulk","description":"Applies one change to many of a person's form submissions at once, and answerswith a plain-text confirmation rather than the rows it changed."}},"httpPath":"/api/v2/user/{user_id}/form/user-submission"}]}],"expanded":"true"}]}