Guides · Setup guides

Connect any API to Outloop — and let an agent do the setup

Last updated:

In short

A Custom API is how Outloop connects a provider that has no built-in connector — you declare the operations an agent may call, and Outloop performs them with a credential the agent never sees.

Tell your agent which service to connect and the Outloop Custom API Setup Skill researches the provider, configures the service in the visible Outloop dashboard, and takes it through verification. When a credential is required, Outloop asks you to enter it directly. Or configure it yourself in nine steps below.

Tell your agent which service you want to connect.

The Outloop Custom API Setup Skill researches the provider, configures it directly in Outloop, validates the connection, and takes the setup through verification.

When a credential is required, Outloop asks you to enter it directly.

The agent never sees the secret.

Summarize this setup guide with AI ChatGPTClaudePerplexity

Two ways to set this up

Both paths end in the same place: an approved service in one workspace, with declared operations, a credential you typed into Outloop, and one real provider operation that completed. What differs is who does the clicking.

Check for a native connector first. If Outloop already ships a connector for the service, use it: it carries per-workspace resource pinning, provider-specific guardrails and its own published setup guide. A Custom API is for the providers that have no row in the picker — not a second way to do a connector that already exists.

A. Let the Setup Skill do it

The Outloop Custom API Setup Skill is a downloadable Agent Skill. One package, two platform labels — Claude Code and Codex share the Agent Skills folder format, and only the install directory differs.

Download it from the Skill library →

1. Unpack it into your runtime's skills folder

Claude Code:

Personal   ~/.claude/skills/outloop-custom-api-setup/
Project    .claude/skills/outloop-custom-api-setup/
Invoke     /outloop-custom-api-setup

Codex:

Personal   ~/.codex/skills/outloop-custom-api-setup/   (also ~/.agents/skills/)
Project    .agents/skills/outloop-custom-api-setup/
Invoke     $outloop-custom-api-setup

2. Register the Outloop Managed Browser once

The Skill works by operating the visible Outloop dashboard in a browser, so the runtime needs a browser path. Register the Managed Browser MCP server once per runtime:

agent-secrets browser mcp
This is one-time operator setup, not part of connecting a service. It is the only terminal command anywhere in this guide — the setup workflow itself has no terminal step. Without it the Codex package, and a Claude Code install with no Chrome extension, has no browser to work in and does nothing. On Claude Code the alternative browser path is Claude in Chrome; on Codex the Managed Browser is the only path.

3. Say which service to connect

Open the runtime in the client folder and say, in your own words:

Connect <service> to Outloop.

The Skill asks one question back — which service, and what should the agent be able to do with it — then researches the provider's documentation and starts configuring. The outcome matters: "read our documents" and "create and send documents" produce different operation sets, and the second is not finished by configuring the first.

The in-product card that hands setup to the Setup Skill
The same handoff, from inside the app: let an agent set this up.
The only manual step. The Skill navigates to the credential screen, says in plain words what to enter, and pauses. You type the value and click Save. It resumes on the visible Stored · never shown state. It never asks for the value in chat, never reads the field, and never places it in context, logs, files or screenshots.

What the Skill is not allowed to do

On the Outloop dashboard origin, a set of browser tools is blocked by name — in both browser vocabularies. The Skill can see and click the dashboard; it cannot run code in it, read its network traffic or console, upload a file to it, or photograph it.

1. What are you connecting?

Name the provider and what the agent should accomplish. The outcome decides which operations count as complete — it is the thing every later step is measured against, and it is why "connect the API" is not a finishable request on its own.

The Outloop Overview with a workspace row selected
Start in the workspace the service belongs to. One client per workspace.
The API Keys and Access list for one workspace
API Keys and Access lists what this workspace can already reach.

2. Setup path

Three ways in: let an agent set it up (recommended), import an OpenAPI description, or configure manually.

The service picker with the add-a-custom-service entry
Search the picker first. A native connector beats a Custom API every time — build one only when there is no row.
OpenAPI is a faster source, not a guarantee of workflow completeness. An import produces a reviewed draft of operations. Nothing is approved until you approve it, and nothing is verified until one real provider operation completes. Outloop imports OpenAPI 3.0, 3.1 and 3.2; Swagger 2.0 has to be converted first.

Then the creation card: a service name and the documented HTTPS base URL, including the version prefix the provider publishes. A missing version prefix is the single most common cause of a 404 on every path.

The Connect a Custom API card with a name and an HTTPS base URL
A name and the documented HTTPS base URL, including the version prefix the provider publishes.

3. Authentication

Choose the authorization scheme, the credential reference and — when the provider needs one — the header name, prefix or template. Values are entered once in Outloop and never shown again.

The authentication kind selector with a masked value preview
Pick the scheme the provider documents. The preview stays masked — the value itself is never shown here.

The twelve authentication kinds

The "use it when" column is deliberately the question you can answer from the provider's own documentation. Kinds marked JSON-only are configured in Advanced JSON today — there is no form for them yet, and saying otherwise would waste your afternoon.

Kind Use it when What it needs JSON-only
No authentication Public or IP-allow-listed endpoints.
Bearer token The docs say an Authorization header carrying “Bearer <token>”. Credential.
API key / custom header The docs name a header such as X-API-Key, or a prefixed Authorization value such as “API-Key …” or “Key <id>:<secret>”. Credential, header name, prefix, template or parts.
API key in query parameter The docs put the key in the URL, for example ?api_key=… Credential, parameter name.
Basic · username and password The docs say HTTP Basic; the username is non-secret and the password is the credential. Username, password credential.
Credential in request body The provider expects the key inside a JSON or form field. Credential, field pointer.
OAuth · refresh token You hold a long-lived refresh token and the provider exchanges it at a token endpoint. Refresh credential, client credentials, token endpoint. Advanced JSON
OAuth · client credentials An application (not a user) obtains an access token with a client id and secret. Client id credential, client secret credential, token endpoint. Advanced JSON
Digest · challenge authentication The provider answers 401 with a WWW-Authenticate: Digest challenge. Username, password credential, probe operation. Advanced JSON
HMAC / request signing Requests must be signed (RFC 9421, AWS SigV4 or a documented recipe). Signing credential, signing recipe. Advanced JSON
mTLS · client certificate The provider requires a client certificate; it can accompany another kind. Certificate credential, private key credential. Advanced JSON
Session · login then reuse A login call returns a session value reused on later calls — common with SOAP. Login operation, capture pointer, reuse rule. Advanced JSON
The compound key is the one people get stuck on. When the docs show Authorization: API-Key <key> or Key <id>:<secret>, sending the value bare gets a 401 — and the natural next move, asking the provider for a new key, is exactly wrong. The key was fine; the composition was not. Use the value template, or Multiple credential components for a two-part value.

The credential reference, and the one place a credential is typed

The configuration names a reference — a name standing for a value. The value itself is entered once, in Outloop, by a person, and is never displayed again.

A credential reference showing as assigned
The configuration names a reference. The value lives elsewhere and is never displayed again.
The empty credential entry field in Outloop, never showing a value
The one manual step, and the only place a credential is ever typed: Outloop itself.
Outloop never asks you for a credential anywhere else. Not on this website, not in a form, not in a chat with an agent, and not in a support message. The Outloop app on your Mac is the only place, and once saved the value is read host-side at request time and redacted out of every result and audit line.

4. Workflow readiness

Operations are approved request shapes: method, path, effect, parameters, response handling. Nothing outside the grid can be called, by anyone.

The operations grid with the add-operation control
Operations are approved request shapes. Nothing outside the grid can be called.
An operation row showing its HTTP method and path
Method and path come from the provider docs. The method never classifies the operation — the effect does.
A typed parameter schema including a required resource id
A required resource id is declared, so a call missing it is refused locally instead of failing at the provider.

Readiness then measures every capability the intended workflow needs against what is present and what is still missing. A status operation alone cannot create anything — a configuration that can check a job and cannot start one can never be exercised, because the id the status read requires has no producing operation.

Workflow readiness rows showing what is present and what is missing
Readiness is measured against the intended outcome. A status operation alone cannot create anything.

5. Workspace access

A saved configuration grants nothing until workspace access is on. This is the switch people miss. Until it is on, every call is refused with BRIDGE_NOT_ENABLED — locally, before any request leaves your Mac and before any credential is read. Saving is storage. Access is permission. They are different acts.
The workspace access switch, on and off
Access on: this workspace may call the saved configuration.
The workspace access switch, on and off
Access off: the configuration is saved and grants nothing. Calls return BRIDGE_NOT_ENABLED with no provider request.

Then validate and save. Validation is local, and an incomplete result is a neutral fact that names the field.

Local validation results, including an incomplete state rendered neutral
Validation is local. Incomplete is a neutral fact, not a failure — it names the field.
A saved configuration that is explicitly not yet provider-verified
Saved and not provider-verified are two separate facts, shown as two separate facts.

Setup is six independent facts, never one light

There is deliberately no collapsed "Connected" or "Ready" state anywhere in Outloop. Collapsing these is exactly how a half-configured service reads as finished.

State What it means on its own
saved The configuration validated locally and was stored.
operations_configured At least one operation is declared, with its effect classified.
credentials_complete Every credential component the authentication kind needs has a stored value.
enabled Workspace access is on, so this workspace may call the configuration.
provider_verified One real provider operation completed against this exact configuration and credential.
workflow_ready Every capability the intended outcome needs is present — not just a status read.
The service row with every setup state satisfied
Six independent facts, each shown on its own. There is no single "connected" light.

6. Verify

Run one low-risk provider operation through Outloop and confirm the visible verified state. A read, never a write: an access check is not the place to exercise a mutation.

The Test provider dialog with the prepared non-secret request visible
The prepared request is visible and carries no credential — Outloop supplies that host-side.
operation:        the lowest-risk real read you declared
decision:         allow
http_status:      200
secret_exposed:   false
runtime_verified: yes

provider_verified is now true for THIS saved configuration
and THIS credential. Editing either one invalidates it.
A verified provider operation
One real provider operation completed. Proof is tied to this exact configuration and credential.

The required-resource rule

An id from another tool or account is not proof of this configuration. When an operation's path takes an id the provider creates — a request, job or document — the only id that proves this configuration is one this configuration created. Pasting an identifier minted in the provider's own web account, or through some other connector, may even return a result, and it still proves nothing: the credential, the account and the path that produced it were different. Create one with the approved create operation, or pick a different operation for the test.
The rescue shown when an operation needs a provider-created resource id
An id from another tool or account is not proof. Create one with the approved create operation.
An HTTP 401 with the authentication-scheme rescue card
A 401 is usually composition, not a bad key — the scheme word, the header name, the prefix.

7. Run with your agent

Hand the agent the approved service. It inspects the approved operations and carries provider-generated ids between operations itself — you never paste a job id from one step into the next.

Use the approved {service} Custom API in this workspace. Inspect the approved operations and complete the task through Outloop. Handle provider-generated request/job/resource IDs internally. Do not ask for or expose credentials or authentication headers.

Substitute the real service name for {service}. Nothing in that prompt asks for a credential, and nothing in it could produce one: Outloop composes the authentication host-side, so the agent uses the credential's capability without ever seeing it.

The connected-services view after setup
The configured service afterwards, alongside the workspace’s other approved access.

8. Files and results

Real client work produces files, and a file has to land somewhere sane. Outloop covers four shapes:

Result artifact retrieval configured with a pointer and approved origin
Submit, carry the id, poll to a terminal state, retrieve. Polling is 1–100 attempts per read step.
Response handling set to save the result as a workspace file
A binary answer becomes a workspace file receipt rather than bytes in a conversation.
Outloop is not a file manager or a media tool. It moves an approved provider's result into the workspace under declared rules, and that is the whole of it. Blocked actions stay blocked: a file capability never widens what an operation may do.

9. Troubleshooting

The latest attempt selects the rescue card, and every card names the control to fix. The rows below are in match order — the first matching row wins — with HTTP statuses first, then codes.

A local refusal is never evidence about the provider. "Local" means Outloop refused before any provider request left your Mac — no call was made, and usually no credential was read. This is the distinction people most often get wrong: a local refusal tells you about your configuration or your workspace settings, never about the provider's key, plan or uptime.
What you see What happened Where to look Next action Local
HTTP 401 The provider rejected the credential. Authentication → scheme, header name, composition details. Match the provider docs exactly: scheme, header name, prefix or template. For a two-part key use Multiple credential components. Then re-run the test.
HTTP 403 The provider denied this operation. Authentication passed; authorization did not. The provider’s account and permission settings; the operation path. Grant the key the needed permission or plan on the provider side, or pick an operation the key may perform.
HTTP 404 The provider found nothing at that path. The request did reach the provider. Connection → base URL; the operation path; the resource id you entered. Check the full URL against the docs. If the operation needs a resource id, create one with the approved create operation first — an id from another tool or account is not proof.
HTTP 405 The provider does not accept this method here. Path reached; method refused. The operation’s method. Set the method the docs specify, and classify the effect honestly.
BRIDGE_CONFLICT The provider reported a conflict (HTTP 409). The resource already exists, or refuses this change in its current state. The current provider resource. Read the resource back before repeating a create or update. Never retry an uncertain mutation.
BRIDGE_RATE_LIMITED The provider is rate-limiting (HTTP 429). Nothing in Outloop needs changing. The reported retry_after_s, when the provider sends Retry-After. Wait the reported interval, then re-run. Consider fewer polling attempts in workflows.
BRIDGE_PENDING The provider accepted the request and is still working. provider_accepted is true; verified_completion is not yet. This is normal, not a failure. The status operation and Result artifact retrieval. Poll the status operation with the returned id until it is terminal, then retrieve the result.
BRIDGE_BUSINESS_ERROR HTTP 2xx, but the body matched a declared error signal — for example success:false. Transport and auth worked. The request parameters, and the provider’s error message in the audit. Fix the input the provider objected to. Keep the error signals declared so a failure never reads as success.
BRIDGE_SOAP_FAULT The SOAP service returned a fault inside HTTP 200. Transport worked. The operation’s SOAP binding and the session login operation. Compare the envelope with the WSDL example; re-run the login operation if the session expired.
BRIDGE_PROVIDER_ERROR The provider failed (HTTP 5xx or an unexpected status). Nothing in the configuration is proven wrong yet. The provider’s status page; the declared success statuses. Retry later. If the docs say this status is normal for this call, declare it as a success or pending status.
BACKEND_SECRET_MISSING A required credential component is assigned in the configuration but has no stored value for this workspace. The credential panel for this service. Enter the value once in Outloop — Add key, this service, Save. The agent never sees it. Local
BRIDGE_CREDENTIAL_NOT_ASSIGNED The authentication block names a reference that has no stored value. Authentication → credential reference. Assign the reference, store its value, save. Local
BRIDGE_AUTH_REJECTED Request sent; the provider refused the assigned credential. Authentication. See the HTTP 401 guidance: scheme, header name, composition.
BRIDGE_OAUTH_… · SESSION · DIGEST · SIGNING The authentication lifecycle failed before the operation. Token exchange, login, challenge or signing did not complete, so the target operation was never reached. Authentication → lifecycle fields: token endpoint, login operation, probe operation, signing recipe. Fix the lifecycle configuration in Advanced JSON, and test the login or probe operation on its own.
BRIDGE_NOT_ENABLED Workspace access is off. The configuration is saved, but this workspace may not call it. Workspace access. Turn workspace access on and save. Local
BRIDGE_RECREATION_… The saved configuration is from an older engine and no longer validates. Advanced JSON. Recreate the configuration keeping the same operation ids and provider-created resource ids; validate; save. Local
BRIDGE_OPERATION_REQUIRED This test needs an explicit choice first — the selected operation is the unreviewed root read, or has a non-read effect that must be acknowledged. Test provider → operation and effect. Choose a real low-risk read operation, or acknowledge the effect deliberately. Local
BRIDGE_OPERATION_NOT_ALLOWED The agent or the test named an operation that does not exist, or was renamed. Operations. Use one of the declared operation ids, and reopen the test after saving. Local
BRIDGE_PARAMETER_INVALID A parameter did not match its declared shape: missing, wrong type, or outside the approved pattern. Test provider → parameters; the operation’s parameter schema. Enter the named parameter as declared, or relax the declaration if the docs allow it. Local
BRIDGE_RESOURCE_… This operation needs an existing provider resource — a request, job or document the provider creates. Operations → the create operation that produces the id. Create one first with the approved create operation, or choose another operation for the test. Local
DESTRUCTIVE_ACTION_BLOCKED The operation is classified destructive and the workspace setting is off. Destructive actions. Leave it off unless the workflow truly needs deletes. If it does, enable it deliberately and save. Nobody is being asked to approve anything — this is a setting. Local
DATA_PRIVACY_ACTION_NOT_ENABLED The operation is classified privacy_delete, and that family is switched on separately. Workspace settings. Enable the data-privacy family only for the workspace that needs it. Local
BRIDGE_FILE_RESPONSE_NOT_ENABLED The agent asked for a file but the operation’s response mode is inline. The operation’s response handling. Set the response mode to auto or file, save, then request the file again. Local
BRIDGE_TRANSFER_URL_… The provider returned a download URL on a host or path prefix that is not approved. No credential was forwarded and no download happened. Result artifact retrieval → origins and path prefix. Add the exact HTTPS origin the provider uses — no wildcards — and the path prefix; save. Local
Destination / host / redirect / DNS refusals A private or unapproved host, a redirect off-origin, or a DNS failure. The request did not leave the approved boundary. Connection → base URL; result origins. Use the documented public HTTPS host. Approve private destinations explicitly if the provider is internal. Local
Media / file / body / multipart refusals The file, body or upload did not meet the declared limits: wrong workspace path, disallowed MIME type, size over the limit, or a body format mismatch. The operation’s body sources, multipart parts and limits. Point at a file inside the workspace, match the declared type and size, or raise the limit deliberately. Local
BRIDGE_RESPONSE_… · XML · STREAM The provider answered, but the response did not match the declared format — HTML or XML where JSON was declared, an oversized body, or a selector pointing at nothing. The operation’s response format, data pointer and selectors. Declare the real response format and pointers, taken from a documented example.
Configuration refusals (contract, header, path, pagination, workflow, stage, engine) The definition itself was refused: invalid, unsupported by this engine version, or changed while a test was open. Validate in the editor — the message names the field. Fix the named field, validate, save, reopen the test. Local
SERVICE_NOT_GRANTED · TARGET_HOST_NOT_ALLOWED · METHOD_NOT_ALLOWED · CAPABILITY_NOT_ENABLED This workspace may not use that service or method. The grant was removed, the workspace archived, or the method or host is outside the approved set. The service row for this workspace. Re-grant the service to the workspace, or approve the method or host in the configuration. Local
BRIDGE_TRANSPORT · DEADLINE · CANCELLED · BUSY · EXECUTION The request could not be completed — network failure, timeout, cancellation, or an internal execution error. The outcome is uncertain if the operation was a mutation. Provider reachability; the audit entry. For a read, retry. For a mutation, read the resource back before repeating.

What the engine supports

Every number below is a property of the shipped Custom API bridge contract, read out of the product rather than written from memory. They describe what the engine accepts — they are not a claim that any particular provider has been connected or verified.

Dimension What the engine supports
HTTP methods 7 — GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS. CONNECT and TRACE are always denied. A POST can be a read (SOAP, search); the method never classifies the operation.
Effects 9 — read, compute, write, external_send, financial, access_change, consent_change, destructive, privacy_delete. Every operation declares one honestly.
Authentication kinds 12 — from no authentication through bearer, composed API keys, Basic, OAuth, digest, HMAC signing, mTLS and session login.
Body and response formats 7 — json, text, form, binary, multipart, xml, soap — plus auto.
OpenAPI import 3.0, 3.1 and 3.2. Swagger 2.0 must be converted first.
Envelope limit 8 MiB request and response.
Header limit 64 KiB.
Multipart parts 128.
Workflow steps 16, with 1–100 poll attempts per read step.
Upload / download ceilings 50 GiB each.
SOAP 1.1 only.

Two consequences worth stating plainly. The method never classifies the operation — a POST can be a read, which is normal for SOAP and for search endpoints, so every operation declares its effect honestly instead. And SOAP 1.1 is supported and shipped, including the session pattern, so "we only do REST" was never true of this engine.

Reusable patterns

These are shapes, not provider code. Outloop ships no provider-specific Custom API adapters of any kind.

Pattern What it covers
REST API with an API key Header or query key; JSON read and write operations.
Bearer token or OAuth Static bearer, refresh-token exchange, or client credentials.
Multiple credential components “Key <id>:<secret>” style values composed host-side from separate references.
Async create → poll → result Submit, carry the id, poll status, retrieve the terminal result.
Provider-generated IDs IDs flow from the create operation into later operations. The agent carries them; nobody pastes them.
Uploads A workspace file as a body source or a multipart part, with MIME and size limits.
Downloads Binary responses published as workspace files, with collision rules.
Provider-issued result URLs Approved result origins and a path prefix. No API credential is forwarded to the result host.
SOAP and session APIs Login operation, captured session value, reuse rule, fault signals.
Complex APIs Signing, digest, mTLS, pagination and workflows edited in Advanced JSON.

Two worked examples

These are recipes, not adapters. PandaDoc and Higgsfield are named because each is the clearest real illustration of a pattern — nothing more. Neither is an Outloop integration, a supported connector, or provider-specific code, and neither has been runtime-verified on this site. Always re-read the provider's current documentation; nothing here substitutes for it.

A document API with a prefixed API key

The documentation shows the authorization value as API-Key <your key>. A first setup almost always sends the key bare — because "API key" sounds like "paste the key" — the provider answers 401, and the obvious next move of requesting a new key is exactly wrong. Set the value template to the scheme word, a space, then the single credential placeholder. Not the bare value, and not Bearer.

The rest of the recipe: import the published OpenAPI specification by URL and expect a large catalogue, of which most operations are irrelevant to your outcome; select what the outcome needs and classify each effect honestly, because a document create is a write, not a read. Creating a document is asynchronous — the provider returns an id in a non-terminal state — so the honest workflow is create, carry the id, poll to a terminal state, retrieve. The retrieval is a binary response, so set that operation to save as a workspace file.

Stop before the irreversible part. Creating a draft is safe and reversible. Sending a document to a recipient is an external send: it reaches a real person and cannot be taken back. Configure a send operation only when you ask for one, classify it honestly, and never exercise it as a verification. Verify with a read; prove the workflow with a draft.

An async media API whose result lives on another host

Four operations in sequence: a create that submits the generation and answers with a request identifier; a status read that takes that identifier and reports progress; a result read whose terminal payload carries a URL to the finished media on a host that is not the API host; and the retrieval that follows it to an approved result origin and saves a workspace file. Configure result artifact retrieval with a JSON pointer to the media URL, the exact HTTPS result origin, and the path prefix. Exact origins only — no wildcards.

What is proven, and what is not claimed

This is a universal guide, so it has no single provider to have verified — and a page that does not say so is a page borrowing credibility it did not earn. Each line below carries exactly one status.

Rotate or revoke safely

Verification is tied to the exact saved configuration and the exact credential. Editing either invalidates it — which is the point. A rotated key is a different credential, and a configuration that worked with the old one has not been shown to work with the new one.

To take access away without touching the credential at all, turn workspace access off. The configuration stays, every call refuses locally, and nothing reaches the provider.

Glossary

Term What it means in Outloop
Operation One approved request shape: method, path, effect, parameters, response handling.
Effect Honest classification of what an operation does: read, compute, write, external_send, financial, access_change, consent_change, destructive, privacy_delete.
Credential reference A name inside the configuration that stands for a value stored once in Outloop and never shown.
Workspace access The switch that lets this workspace call the saved configuration.
Provider verified Outloop ran one operation against the provider and the provider completed it. Proof is tied to the exact saved configuration and credential; editing either invalidates it.
Workflow A saved sequence of operations with bindings and polling, run as one request.
Result artifact retrieval Reading a JSON result, following its file URL to an approved origin and saving the file into the workspace, without forwarding the API credential.

Official documentation

A Custom API is configured entirely from the provider's own published API documentation — that is the authoritative source for the base URL, the authorization scheme, the paths, the parameters and the terminal states. Outloop has no provider-specific knowledge to add, and neither this guide nor the Setup Skill substitutes for reading it.

Outloop is available with guided onboarding for agency teams. Outloop is an independent tool and is not affiliated with or endorsed by any provider named on this page. Provider names are used only to illustrate reusable configuration patterns, and are trademarks of their respective owners.

Summarize this setup guide with AI ChatGPTClaudePerplexity

Name the service. Let the agent do the setup.

Connect approved access once, in the workspace it belongs to, and let agents work across client systems without ever seeing the credential.

Start 14-day trial
Frequently Asked Questions

Custom API setup + Outloop — FAQ