---
title: "Ingest Credentials"
method: POST
path: "/v1/portal/credentials"
tags: ["portal"]
---

# Ingest Credentials

`POST /v1/portal/credentials`

## Request

- Base URL: `https://app.teetra.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.teetra.com/v1/portal/credentials`
- Auth: none declared

Ingest encrypted upstream credentials for an adapter, creating a CredentialGrant.

SWEEP FIX: ownership was previously verified only "if Authorization Bearer is provided"
— an anonymous caller with NO header at all skipped the check entirely and could plant an
arbitrary (attacker-controlled) upstream credential against any known ``adapter_id``. A
verified producer token owning the adapter's org is now REQUIRED, not optional.

## Request body

- CredentialIngestRequest
  - `adapter_id` string, required
  - `auth_type` string, required
  - `secret` string, required
  - `key_id` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/teetra/apis/warrant.md) · [All operations](https://skmtc.dev/teetra/apis/warrant/llms.txt) · [OpenAPI document](https://skmtc.dev/teetra/apis/warrant/revisions/0e272d563cc4?raw)
