powered by

Technical Reference

Operations

Updated Mar 20, 2026
The Operations page provides maintenance tools for your Anythink project. Currently it covers search index management — rebuilding or purging the search index for individual entities or the entire project.

Search operations

Anythink maintains a dedicated search index alongside your database. This index powers the fast full-text search available in Grid view and the public search API. In normal operation the index stays in sync automatically, but there are situations where you may need to manually intervene:

  • After bulk data imports where search wasn't updated
  • After restoring a database backup
  • When search results appear stale or inconsistent with the database
  • When troubleshooting unexpected search behaviour

Rehydrate search data

Rehydration rebuilds the search index from the current state of your database. All existing data in the index is replaced with a fresh copy pulled directly from your entities.

When to use: If search results are missing records that exist in the database, or if records appear in search that have been deleted.

Steps:

  1. Go to Settings → Operations
  2. Under Search Operations, click Execute next to Rehydrate Search Data
  3. Confirm the prompt — rehydration will begin in the background
  4. The Indexing Status panel will update to show Indexing for each affected entity
  5. Once complete, status returns to Ready

Rehydration may take a few minutes for large datasets. Your application remains fully functional during the process.


Purge search data

Purging clears all data from the search index without replacing it. After a purge, search will return no results until you run a rehydration.

When to use: If you need to completely reset the search index — for example, after a major schema change or data migration. Always follow a purge with a rehydrate.

Steps:

  1. Go to Settings → Operations
  2. Under Search Operations, click Execute next to Purge Search Data
  3. Confirm the prompt — this action cannot be undone
  4. All search index data is cleared immediately

Per-entity operations

You can rehydrate or purge the search index for a single entity rather than the whole project. This is faster and less disruptive when only one entity is affected.

The Indexing Status panel (below the Search Operations card) lists every entity and its current status:

Status Meaning
Ready (green) Index is in sync
Indexing (blue, spinning) Rehydration in progress
Failed (red) Last indexing attempt encountered an error

Each row has Rehydrate and Purge buttons scoped to that entity. The per-entity Rehydrate button is disabled while indexing is in progress to prevent concurrent operations.

Last indexed timestamp shows when the entity's index was last successfully rebuilt.


Access

The Operations page is restricted to Tenant Admins only. Standard users and editors cannot access this page.

API Reference

Updated Mar 19, 2026
A complete reference of every HTTP endpoint available in your Anythink project, grouped by resource. All endpoints are relative to your project base URL: `https://api.my.anythink.cloud/org/{orgId}/`

Authentication

All endpoints require an Authorization header unless marked as public:

text
Authorization: Bearer <jwt_or_api_key>

API keys (ak_...) are generated from your project dashboard and work for server-to-server calls.


Entities

Every entity you create gets a full set of CRUD endpoints automatically.

http
GET    /entities/{entity}/items
GET    /entities/{entity}/items/{id}
POST   /entities/{entity}/items
PUT    /entities/{entity}/items/{id}
DELETE /entities/{entity}/items/{id}

List parameters

Parameter Type Description
limit integer Records per page (default 20)
page integer Page number (default 1)
filter[field] string Filter by field value
sort string Field to sort by
order string asc or desc

Search

http
GET  /search?q=&e=&page=&pageSize=          (authenticated)
GET  /search/public?q=&e=&page=&pageSize=   (unauthenticated)
Parameter Description
q Search query. Defaults to *
e Entity name to scope search (optional)
page Page number
pageSize Results per page (default 20)

Authentication

http
POST  /auth/v1/token          Sign in with email + password
POST  /auth/v1/refresh        Refresh an expired JWT
GET   /auth/v1/google/authorize    Start Google OAuth flow
POST  /auth/v1/google/callback     Complete Google OAuth

Users

http
GET    /users              List all users
GET    /users/me           Current authenticated user
GET    /users/{id}         Get a user by ID
POST   /users              Create a user (invite)
PUT    /users/{id}         Update a user
DELETE /users/{id}         Delete a user

Roles

http
GET    /roles              List roles
POST   /roles              Create a role
PUT    /roles/{id}         Update a role
DELETE /roles/{id}         Delete a role

Files

http
GET    /files                  List files
GET    /files/{id}             Get file metadata
GET    /files/{id}/get         Download the file (authenticated)
GET    /files/{id}/public      Retrieve public file (no auth required)
POST   /files                  Upload a file
DELETE /files/{id}             Delete a file
DELETE /files                  Bulk delete files

Upload via multipart/form-data. Use ?entityId=&fieldName= query params to attach the file to a record on upload.


Workflows

http
GET    /workflows              List workflows
GET    /workflows/{id}         Get a workflow
POST   /workflows              Create a workflow
PUT    /workflows/{id}         Update a workflow
DELETE /workflows/{id}         Delete a workflow
POST   /workflows/{id}/trigger Run a workflow manually
POST   /workflows/endpoint/{route}   API trigger endpoint (custom route)

Payments

http
GET    /integrations/anythinkpay/payments                        List payments
GET    /integrations/anythinkpay/payments/{id}                   Get payment
GET    /integrations/anythinkpay/payments/status/{status}        Filter by status
POST   /integrations/anythinkpay/payments                        Create payment intent
POST   /integrations/anythinkpay/payments/charge-payment-method  Charge saved card
POST   /integrations/anythinkpay/payments/payment-intent/{id}/confirm    Confirm intent
POST   /integrations/anythinkpay/payments/payment-intent/{id}/capture    Capture intent
GET    /integrations/anythinkpay/payments/payment-intent/{id}    Get intent status

Stripe Connect

http
GET    /integrations/anythinkpay/stripe-connect            Account status
POST   /integrations/anythinkpay/stripe-connect            Create account
POST   /integrations/anythinkpay/stripe-connect/onboarding Get onboarding link
GET    /integrations/anythinkpay/stripe-connect/fees       Platform fee config
POST   /integrations/anythinkpay/stripe-connect/fees/calculate  Calculate fee

Payment Methods

http
GET    /integrations/anythinkpay/payment-methods                         List saved methods
GET    /integrations/anythinkpay/payment-methods/{id}                    Get by ID
POST   /integrations/anythinkpay/payment-methods/setup-intent            Create setup intent
DELETE /integrations/anythinkpay/payment-methods/{id}                    Remove

Menus

http
GET    /menus/my           Get the current user's menu
GET    /menus              List all menus
GET    /menus/{id}         Get a menu with items
POST   /menus              Create a menu
POST   /menus/{id}/items   Add an item
PUT    /menus/{id}         Update a menu
PUT    /menus/{id}/items/{itemId}         Update an item
PUT    /menus/{id}/items/reorder          Reorder items
DELETE /menus/{id}                        Delete a menu
DELETE /menus/{id}/items/{itemId}         Delete an item

Email Templates

http
GET    /email-templates            List templates
GET    /email-templates/{type}     Get a template by type
PUT    /email-templates/{type}     Update a template

Template types: confirmation, invite, recovery, magic_link, email_change, added_to_tenant


Secrets

http
GET    /secrets            List secret names (not values)
POST   /secrets            Create a secret
PUT    /secrets/{name}     Update a secret value
DELETE /secrets/{name}     Delete a secret

Response format

All list endpoints return a consistent paginated envelope:

json
{
  "items": [...],
  "total_items": 42,
  "page": 1,
  "page_size": 20,
  "has_next_page": true
}

HTTP status codes

Code Meaning
200 OK — request succeeded
201 Created — record created successfully
400 Bad Request — invalid parameters or body
401 Unauthorised — missing or invalid token
403 Forbidden — valid token but insufficient permissions
404 Not Found — resource does not exist
409 Conflict — duplicate value (e.g. unique field)
500 Server Error — something went wrong on our side

Template Syntax

Updated Mar 19, 2026
Workflow steps use a template syntax to pass data between steps. This reference covers every available variable, function, and pattern.

Overview

Template expressions are wrapped in double curly braces: {{ expression }}. They are evaluated at runtime when the step executes, so they always contain the actual data from the current workflow run.

Templates are supported in:

  • Call an API — request headers and body
  • Create Data — field values
  • Update Data — field values and record ID
  • Condition — field references in filter conditions

Templates are not supported in the URL field of Call an API steps. The URL must be a fixed string.


Trigger data

Access the record or payload that started the workflow:

text
{{ $anythink.trigger.data.field_name }}

Examples

text
{{ $anythink.trigger.data.id }}
{{ $anythink.trigger.data.email }}
{{ $anythink.trigger.data.status }}

For Timed and Manual triggers with no record, $anythink.trigger.data is empty.

For Event triggers (EntityCreated, EntityUpdated, EntityDeleted), $anythink.trigger.data contains the full record that triggered the workflow.

For API Endpoint triggers, $anythink.trigger.data contains the JSON body of the incoming HTTP request.


Step output

Access the output of a previous step:

text
{{ $anythink.steps.step_name.data[0].field_name }}

Step names are set when you name a step on the canvas. Use only lowercase letters, numbers, and underscores.

Important: Run Script wraps output in an array

Run Script steps always wrap their return value in an array. So even if your script returns { result: "done" }, it arrives downstream as [{ result: "done" }] and is accessed as:

text
{{ $anythink.steps.my_script.data[0].result }}

Read Data returns an array

Read Data steps return an array of records. Access the first record:

text
{{ $anythink.steps.get_user.data[0].email }}
{{ $anythink.steps.get_user.data[0].id }}

Create Data returns the created record

After creating a record, access the new record's generated ID:

text
{{ $anythink.steps.create_order.data[0].id }}

Secrets

Reference an encrypted secret stored in your project:

text
{{ $anythink.secrets.SECRET_NAME }}

Use in API headers to avoid hardcoding credentials:

json
{
  "x-api-key": "{{ $anythink.secrets.MY_API_KEY }}",
  "Authorization": "Bearer {{ $anythink.secrets.SERVICE_TOKEN }}"
}

Secret values are masked in job history and never exposed in plain text.


Condition step field references

Condition steps use a slightly different syntax — without the double braces:

text
$anythink.steps.step_name.data[0].field_name
$anythink.trigger.data.field_name

These go in the field input of each condition row, not in a template block.


Bulk Create Data

To create multiple records at once from an array returned by a Run Script step:

text
{{ $anythink.steps.parse_step.data[0].items }}

Where items is an array of objects in your script's return value. Anythink creates one record per item.


Common patterns

Pass trigger data into a new record

json
{
  "user_id": "{{ $anythink.trigger.data.id }}",
  "email": "{{ $anythink.trigger.data.email }}",
  "status": "pending"
}

Chain step outputs

json
{
  "order_id": "{{ $anythink.steps.create_order.data[0].id }}",
  "summary": "{{ $anythink.steps.generate_summary.data[0].text }}"
}

Call an external API with secrets

Headers:

json
{
  "x-api-key": "{{ $anythink.secrets.ANTHROPIC_KEY }}",
  "anthropic-version": "2023-06-01"
}

Body:

json
{
  "model": "claude-haiku-4-5-20251001",
  "max_tokens": 1000,
  "messages": [{ "role": "user", "content": "{{ $anythink.trigger.data.text }}" }]
}

Related Articles

Discover more content related to technical reference.
Page Not Found | Anythink Docs | Anythink Docs