# AIOZ Pin — Pinning Services API (PSA)

The IPFS Pinning Services API is a standardized spec for integrating with any compatible pinning service.
PSA endpoint: https://api.aiozpin.network/api/psa/

---

## Authentication

PSA requires a JWT access token obtained via email-based login.

### Step 1 — Request login code

GET https://api.aiozpin.network/api/auth/email_login/{email}

```typescript
async function requestLoginCode(email: string) {
  const res = await fetch(`https://api.aiozpin.network/api/auth/email_login/${encodeURIComponent(email)}`)
  return res.json()
}

await requestLoginCode('user@example.com')
// result.message: "Send mail successfully. Please check your email to login!"
```

### Step 2 — Login with code

POST https://api.aiozpin.network/api/auth/login

```typescript
async function login(email: string, code: string) {
  const res = await fetch('https://api.aiozpin.network/api/auth/login', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ email, code })
  })
  return res.json()
}

const result = await login('user@example.com', '123456')
// result.access_token  — JWT for PSA and admin operations
// result.refresh_token
```

---

## IPFS CLI Integration

Add AIOZ Pin as a remote pinning service in the IPFS CLI (Kubo):

```shell
# Add AIOZ Pin as a remote service
ipfs pin remote service add pin https://api.aiozpin.network/api/psa/ YOUR_JWT

# Pin a CID
ipfs pin remote add --service=pin --name=my-file QmYourCIDHere

# List successful pins
ipfs pin remote ls --service=pin

# List pending pins
ipfs pin remote ls --service=pin --status=queued,pinning,failed

# Help
ipfs pin remote --help
```
