# Update the docs from CI

> Send each merged change to usedocs from GitHub Actions, GitLab CI, or any pipeline, and review the doc edits it proposes.

With the GitHub app, merged pull requests already propose doc edits. For any other code host, or to control when it runs, send the change from your pipeline as a task. usedocs reads the diff against your docs and proposes edits to the articles it affects, new articles it needs, and a changelog entry. Nothing goes live until someone applies it.

You need a workspace API key with `content:write` (**Settings → API and MCP**), stored as a secret named `USEDOCS_API_KEY`. Send an `Idempotency-Key` so a retried job doesn't run twice.

## GitHub Actions

```yaml
# .github/workflows/docs.yml
on:
  pull_request:
    types: [closed]
jobs:
  docs:
    if: github.event.pull_request.merged
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }
      - name: Send the change to usedocs
        env:
          USEDOCS_API_KEY: ${{ secrets.USEDOCS_API_KEY }}
          TITLE: ${{ github.event.pull_request.title }}
          URL: ${{ github.event.pull_request.html_url }}
        run: |
          git diff ${{ github.event.pull_request.base.sha }}...${{ github.event.pull_request.merge_commit_sha }} |
            jq -Rs --arg t "$TITLE" --arg u "$URL" '{change: {kind: "pr", title: $t, url: $u, diff: .}}' |
            curl -sS -X POST "https://usedocs.app/v1/tasks" \
              -H "Authorization: Bearer $USEDOCS_API_KEY" -H "Content-Type: application/json" \
              -H "Idempotency-Key: ${{ github.sha }}" --data-binary @-
```

## GitLab CI

```yaml
# .gitlab-ci.yml
docs:
  rules: [{ if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' }]
  script:
    - git diff "$CI_COMMIT_BEFORE_SHA...$CI_COMMIT_SHA" |
        jq -Rs --arg t "$CI_COMMIT_TITLE" '{change: {kind: "pr", title: $t, diff: .}}' |
        curl -sS -X POST "https://usedocs.app/v1/tasks" -H "Authorization: Bearer $USEDOCS_API_KEY"
          -H "Content-Type: application/json" -H "Idempotency-Key: $CI_COMMIT_SHA" --data-binary @-
```

## See what it proposed

The response is a task. Poll `GET /v1/tasks/{id}` until it's `completed`, or subscribe to the `task.completed` webhook. Its `result.draftIds` are the proposed edits and new articles; open them in **Drafts → To review**, or read them with `GET /v1/drafts/{id}`, which includes a unified diff. See the [Docs API](https://help.usedocs.app/docs-api).