Developer documentation

Build it into
your workflow.

The editor, REST API and MCP work with the same Signature Buddy account. Start with a status request, then connect the operations your workflow needs.

Authentication

Go live from the editor to create your account. Your account key is shown after checkout and saved in that browser’s Account & image hosting settings. Keep it private. Send it in the Authorization header; never put it in a URL or public browser code.

Check your account
curl https://signatures.workflowcorp.com/api/v1/status \
  -H "Authorization: Bearer YOUR_ACCOUNT_KEY"
The status endpoint can report an inactive account. Other operations require an active account. A key authorises account actions; only connect clients you trust.

API operations

Base URL: https://signatures.workflowcorp.com. JSON request bodies use Content-Type: application/json. The OpenAPI schema contains the request definitions.

Get account status

GET/api/v1/status

Read billing, Google connections, saved schedule summary, auto-apply setting and last deployment for the authenticated account.

Upload a signature image

POST/api/v1/upload

Host a PNG, JPEG, GIF or WebP image (up to 3 MB by default) at a permanent public URL. Images are content-addressed and cannot be deleted; do not upload private content.

Request schema
{
  "type": "object",
  "properties": {
    "data": {
      "type": "string",
      "minLength": 1,
      "description": "A base64 image data URL, for example data:image/png;base64,..."
    }
  },
  "required": [
    "data"
  ],
  "additionalProperties": false
}

Get signature schedule

GET/api/v1/schedule

Read this account's complete saved signature schedule, or null if none exists.

Save signature schedule

PUT/api/v1/schedule

Replace this account's complete schedule. Updates billed seat quantity to match the team and may create prorated charges. The daily job will publish it when auto-apply is enabled; this call does not publish immediately. Confirm the team and schedule before saving.

Request schema
{
  "type": "object",
  "properties": {
    "schedule": {
      "type": "object",
      "required": [
        "people"
      ],
      "additionalProperties": true,
      "properties": {
        "generator": {
          "type": "string",
          "maxLength": 120
        },
        "format": {
          "type": "integer",
          "minimum": 1,
          "maximum": 2
        },
        "generated": {
          "type": "string",
          "maxLength": 50
        },
        "received": {
          "type": "string",
          "maxLength": 50
        },
        "timezone": {
          "type": "string",
          "maxLength": 100
        },
        "company": {
          "type": "string",
          "maxLength": 500
        },
        "valid_until": {
          "type": "string",
          "format": "date",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        "people": {
          "type": "array",
          "maxItems": 5000,
          "items": {
            "type": "object",
            "required": [
              "email",
              "windows"
            ],
            "additionalProperties": true,
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 500
              },
              "email": {
                "type": "string",
                "maxLength": 254,
                "pattern": "^[^\\s@/\\\\]+@[^\\s@/\\\\]+\\.[^\\s@/\\\\]+$"
              },
              "windows": {
                "type": "array",
                "maxItems": 1000,
                "items": {
                  "type": "object",
                  "properties": {
                    "from": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                    },
                    "to": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date",
                      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                    },
                    "html": {
                      "type": "string",
                      "maxLength": 10000
                    }
                  },
                  "required": [
                    "from",
                    "html"
                  ],
                  "additionalProperties": false
                }
              }
            }
          }
        }
      }
    }
  },
  "required": [
    "schedule"
  ],
  "additionalProperties": false
}

Apply signatures to Gmail

POST/api/v1/apply

Publish today's saved signatures to connected Gmail mailboxes. Overwrites the current Gmail signatures; confirm the intended account and people first. Returns each mailbox's updated, unchanged, skipped or failed result.

Set daily auto-apply

PATCH/api/v1/settings

Enable or disable daily publication of this account's saved signature schedule. Enabling allows the next daily job to overwrite connected Gmail signatures.

Request schema
{
  "type": "object",
  "properties": {
    "autoApply": {
      "type": "boolean"
    }
  },
  "required": [
    "autoApply"
  ],
  "additionalProperties": false
}

List Workspace people

GET/api/v1/directory

Read people in this account's connected Google Workspace directory. Requires an existing Workspace connection.

Upload an image

Send a supported PNG, JPEG, GIF or WebP as a data URL. The response contains a public image URL you can use in signature HTML. The default limit is 3 MB. SVG uploads are not supported.

Upload a signature image
curl -X POST https://signatures.workflowcorp.com/api/v1/upload \
  -H "Authorization: Bearer YOUR_ACCOUNT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data":"data:image/png;base64,REPLACE_WITH_BASE64"}'

Save and apply a schedule

The editor exports a signatures.json schedule with people, signature HTML, campaign dates and timezone. Use that file as the schedule property for PUT /api/v1/schedule. This replaces the stored schedule for the account; it does not itself publish a signature.

After checking the schedule, call POST /api/v1/apply with {} to publish the signatures currently due. Publishing changes connected Gmail signatures. Set autoApply with PATCH /api/v1/settings to control scheduled application; the service scheduler must also be configured.

Deployment guide

Google Workspace

Your Workspace administrator must authorise domain-wide delegation for the service account shown in the editor. Workflow Corporation support must also verify and bind that administrator to your Signature Buddy account. Once verified, connect the domain, import the directory if needed, and review the team before applying. The connection needs Gmail settings access and read-only directory access. It does not request permission to read message bodies.

Personal Gmail

Use Connect my Gmail when the service’s OAuth connection is available. Google’s consent screen and test-user restrictions depend on the service configuration and verification status. Complete the Google consent flow before trying to apply a signature.

Microsoft 365

Download your deployment schedule and use the supplied PowerShell deployment script. This requires an Exchange Online administrator and a compatible mailbox setup. Validate the result with your organisation’s Outlook clients. Automatic Outlook rollout is not provided by the REST API or MCP.

Manual setup and other clients

From an active account, copy your finished signature in the editor and paste it into the signature settings in Gmail, Outlook or Apple Mail. Email clients handle HTML differently, so send yourself a test message before rolling it out.

Google deployment script

For administrator-managed jobs, the Google deployment script can apply an exported schedule using domain-wide delegation. Configure credentials and schedule execution in your own environment.

Errors and safe retries

Responses use HTTP status codes and a JSON error message. Check the message before retrying. Uploading the same image reuses its content-addressed URL; applying a signature is a publishing operation and should follow a deliberate review.

StatusWhat to check
400Request shape, image format or schedule validation.
401The bearer key is missing or invalid.
402 / 403Account status or access restrictions.
413The request or image exceeds the size limit.
503A required provider or service is unavailable or unconfigured.

Need the same operations in an assistant? See the MCP guide.