# Base API

Base is DevBlanket's message queue and serverless function service.

> **First time here?** Read the [DevBlanket API Overview](https://devblanket.com) first. It explains authentication, how to get your org ID from Door's `/api/me` endpoint, and the conventions shared across all DevBlanket services.

## Authentication

Use your Extra Key as a Bearer token:

```
Authorization: Bearer <your-extra-key>
```

## Key Endpoints

All operations are scoped to an organization. Get your `orgId` from Door's `/api/me` endpoint.

### Queues

Message queues with filtering, acknowledgment, and dead-letter support.

```
GET /api/orgs/:orgId/queues              # List queues
POST /api/orgs/:orgId/queues             # Create queue
GET /api/orgs/:orgId/queues/:name        # Get queue details
GET /api/orgs/:orgId/queues/:name/stats  # Get queue statistics
DELETE /api/orgs/:orgId/queues/:name     # Delete queue
```

#### Create Queue

```json
POST /api/orgs/:orgId/queues
{
  "name": "my-queue",
  "filter": { "type": "order.created" },
  "delivery": "at-least-once",
  "maxAttempts": 3
}
```

#### Publish Message

```json
POST /api/orgs/:orgId/publish
{
  "type": "order.created",
  "data": { ... }
}
```

#### Get Messages

```
GET /api/orgs/:orgId/queues/:name/messages?status=pending&limit=50
```

#### Acknowledge/Reject

```json
POST /api/orgs/:orgId/ack
{ "queue": "my-queue", "seq": "123" }

POST /api/orgs/:orgId/nack
{ "queue": "my-queue", "seq": "123", "requeue": true }
```

### Lambdas

Serverless functions triggered by queue messages.

```
GET /api/orgs/:orgId/lambdas             # List lambdas
POST /api/orgs/:orgId/lambdas            # Create lambda
GET /api/orgs/:orgId/lambdas/:name       # Get lambda
PUT /api/orgs/:orgId/lambdas/:name       # Update lambda
DELETE /api/orgs/:orgId/lambdas/:name    # Delete lambda
POST /api/orgs/:orgId/lambdas/:name/enable   # Enable
POST /api/orgs/:orgId/lambdas/:name/disable  # Disable
GET /api/orgs/:orgId/lambdas/:name/logs  # Get logs
```

#### Create Lambda

```json
POST /api/orgs/:orgId/lambdas
{
  "name": "process-order",
  "queue": "orders",
  "url": "https://example.com/handler.js",
  "exportName": "default"
}
```

### SSE Subscription

Real-time message streaming:

```
GET /api/orgs/:orgId/sse/:queueName
```

## OpenAPI Schema

Full API specification available at:

```
GET /openapi.json
```

## Error Format

```json
{
  "error": "Error message"
}
```
