Stand Guidebook
Chapter 11 of 12
Field guide
What to learn in this chapter
Import one REST API contract at team level, expose a small set of safe operations, attach the integration to a selected Stand-in, and verify live reads or confirmed writes without placing credentials in the model.
Need an exact capability definition, plan requirement, or limitation? Browse the Feature Reference.
Product model
Separate the shared connection from Stand-in access.
An integration is a team-shared connection. Its name, base URL, authentication, and selected API operations are configured once in the Integrations section of the Stand-ins page.
Stand-in access is separate. Open a Stand-in, choose Skills, enable Use integrations, and select the integration instances that Stand-in may use. Two integrations can use the same provider and still expose different accounts, calendars, base URLs, or operations.
Create
Import an OpenAPI declaration.
On the Stand-ins page, find Integrations and click New integration. Choose OpenAPI, enter a team-facing name and description, and set the exact public base URL Stand should call.
Paste the OpenAPI JSON or YAML, or upload the declaration file. Preview tools before saving. Stand does not automatically expose every imported operation.
OpenAPI documentation
Learn the OpenAPI format.
The OpenAPI Initiative’s official guide explains how to describe paths, operations, parameters, request bodies, and reusable schemas. Stand’s Feature Reference defines the subset this connector supports.
OpenAPI setup checklist
- Use a public HTTPS base URL. Unauthenticated HTTP is accepted, but authenticated integrations require HTTPS. Private networks, internal hostnames, and localhost are not supported.
- Choose no authentication, bearer token, API key header, or basic authentication. Tokens, API keys, and passwords must contain at least eight characters. Basic-authentication usernames and passwords cannot contain control characters.
- Keep secrets in the authentication fields; do not paste them into the OpenAPI description.
- Click Preview tools and select only the operations this integration needs.
- Review Read versus Write for every selected operation.
- Create the integration, then expand its row to verify the URL, auth mode, and tools.
- Use Edit to change metadata or credentials. Re-enter the secret when changing the base URL or authentication settings. Re-import a declaration only when replacing the selected tools.
Small read-only OpenAPI example
openapi: 3.1.0
info:
title: Public events
version: "1.0"
paths:
/events:
get:
operationId: listUpcomingEvents
summary: List upcoming public events
parameters:
- in: query
name: limit
schema:
type: integer
minimum: 1
maximum: 50Set the base URL separately in Stand. The model can supply limit, but it cannot replace the host or construct an arbitrary URL.
Operation review
Prefer a small, readable tool set.
Operation names, summaries, descriptions, parameters, and request-body schemas become the Stand-in tool contract. Clear operationId and summary values help the Stand-in choose correctly.
Stand sends JSON request bodies and preserves declared application/json or vendor +json media types. Query arrays retain Swagger collectionFormat and OpenAPI style/explode serialization for repeated, comma-, space-, and pipe-delimited values.
Operation-level parameters replace matching path-item parameters, including Swagger body parameters and their schema and required state.
Path and header parameters must be scalar. Query parameters may be scalar or arrays of scalar values. Stand rejects required cookie, form, content-based, object, nested-array, and reserved-header parameters that it cannot serialize or safely configure; unsupported optional parameters are omitted from the tool contract.
Path and header parameters use OpenAPI simple serialization. Required parameters using other styles are rejected during import; unsupported optional parameters are omitted.
Stand accounts for numeric bounds when checking required path and query sizes. Required declared headers are checked together against the outbound header limit, so operations that cannot produce a sendable request are rejected during import.
Input schemas must resolve to a concrete type supported by Gemini function calling. Stand applies sibling bounds together with every supported anyOf branch and rejects required schemas that have no valid serializable input. Required unconstrained schemas such as an empty schema object are rejected during import; optional unconstrained parameters and request bodies are omitted.
JSON object keys remain required even when they are governed by additionalProperties instead of being listed under properties.
GET, HEAD, and OPTIONS operations start as Read and can be made Write when an apparently read-shaped endpoint has side effects. Other HTTP methods always remain Write so confirmation cannot be bypassed by configuration.
Stand may try another validated DNS address for a failed read-only GET, HEAD, or OPTIONS request. It never automatically resends a Write tool after a transport failure because the API may already have completed the action.
Stand-in access
Attach the integration from Skills.
Open the Stand-in row, click Edit, and choose Skills. Turn on Use integrations and check the team integration instances this Stand-in may use. Save the Stand-in, then use Try it out with a question that requires live data.
The model receives only normalized tools from integrations attached to that Stand-in. Removing the integration from the Stand-in or deleting the team integration refreshes active Stand-in sessions.
Practice
Try this next
- 01Create one public read-only integration.
- 02Attach it to one test Stand-in.
- 03Ask a question whose answer changes over time.
- 04Check that the answer comes from the live API rather than the prompt or knowledge base.
- 05Remove the attachment and verify the Stand-in no longer uses that tool.
Security and limits
Stand keeps the network boundary narrow.
OpenAPI declarations and API responses are treated as untrusted data. Stand resolves bounded local reference chains, including schema aliases, and rejects remote, cyclic, or excessively deep references. Imports have liberal limits for document size, schema depth, operation count, and descriptions.
Stand resolves the configured host to public addresses and pins each outbound connection to a validated address. Configuration checks bound DNS resolution to five seconds; runtime resolution shares the eight-second call deadline. Redirects are not followed. Private, loopback, link-local, metadata, and internal hostnames are blocked at configuration and execution time.
Credentials are encrypted in a separate database table and injected only into outbound headers. Authentication secrets must contain at least eight characters so echoed credentials can be redacted without destroying ordinary response text. They are not included in model tools; when the declaration includes the configured API-key header, Stand satisfies it from the stored credential instead of asking the model or visitor. Stand redacts direct and commonly encoded credential echoes from tool results. Inputs are checked against the imported schema, calls are rate-limited, requests and responses are bounded, and external tool names, descriptions, schemas, and output are labeled as untrusted data for the model.
Self-hosted environments must configure STANDCHAT_INTEGRATIONS_CREDENTIAL_KEY as a Base64-encoded 32-byte key. The same key encrypts credentials and signs visitor write confirmations. Without it, Stand permits only public read-only integration tools.
Configure only API hosts your team trusts. The selected host necessarily receives its credential and operation inputs; a generic connector cannot prevent that host from transforming or forwarding data it legitimately receives. Stand requires the secret again before an authenticated integration can change its base URL or authentication metadata, and validates the resulting authentication header together with every selected or retained tool before save.
Troubleshooting
Test the contract before changing the prompt.
Start with the integration configuration and one direct Try it out question. The error category usually identifies whether the contract, network boundary, authentication, Stand-in attachment, or confirmation step needs attention.
Common failures
What to check
- Host rejected
- Use a public HTTP or HTTPS hostname and, when specified, a port from 1 through 65535. Localhost, private networks, metadata hosts, and internal DNS suffixes are blocked.
- Preview has no tools
- Confirm the declaration has a paths object with HTTP operations and that local references resolve.
- Authentication fails
- Verify the auth mode, API key header name, username, and secret. Secrets are entered separately from the declaration and must contain at least eight characters.
- Stand-in does not call the API
- Confirm Use integrations is enabled, the correct instance is checked, and the operation summary clearly matches the question.
- Write does not run
- The visitor must send a later message containing exactly confirm or confirmed.
- Response is unavailable
- The service may have timed out, returned a binary or compressed body, exceeded the response cap, redirected, or hit the per-integration rate limit.
Questions
Common reader notes
Do I need to run an MCP server for a REST API?
No. For an existing REST API, OpenAPI is the direct path and keeps the Stand deployment in one backend service. This beta currently supports OpenAPI integrations.
Can every rep create an integration?
Yes. Integrations are team-shared and do not require an internal approval workflow.
Can the model see my API token?
The model is not given the configured token. Stand decrypts and injects it only while making the outbound request and redacts direct or commonly encoded echoes from the result. Configure only trusted API hosts because that host necessarily receives the token.
Continue the guide