JustAutomate Offer API

Process workshop: the paid first step, with public prices per market.

GitHub OpenAPI

Operations 1

GET /api/v1/workshop Get the process workshop offer #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/justautomate-ai:justautomate-ai-offer-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

justautomate-ai-offer-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: JustAutomate public Offer API
  version: 1.0.0
  summary: 'Read-only API for the public website of JustAutomate: search and read pages, the process workshop price and contact options.'
  description: 'JustAutomate (justautomate.ai) is a Polish B2B agency that designs and implements AI agents, process automation and system integrations for companies in Poland, Germany, Austria, Switzerland and English-speaking markets.


    This API is **read-only** and exposes only what is public on the website. It never submits forms, books meetings or sends messages: to get in touch, give the user the contact link or e-mail address from `GET /api/v1/contact`. The same data is available over MCP at https://justautomate.ai/mcp.


    **Authentication.** None required. An optional OAuth 2.1 bearer token (scope `mcp:read`, see https://justautomate.ai/auth.md) identifies the agent and raises the rate limit. An invalid or expired token gets `401` with a `WWW-Authenticate` header pointing at https://justautomate.ai/.well-known/oauth-protected-resource; `GET /api/v1/identity` always needs a token.


    **Rate limits.** 120 requests per 60 seconds per IP address, 600 per agent with a token. Every response carries `RateLimit-Policy` (IETF RateLimit header fields) and `X-RateLimit-Limit`. A `429` carries `Retry-After` (seconds) and `RateLimit` with the remaining quota (0). A batch counts as one request.


    **Errors.** Every 4xx and 5xx response is `application/problem+json` (RFC 9457) with `type`, `title`, `status`, `detail`, `instance` and a machine-readable `code`. Each `type` URI points at its section of https://justautomate.ai/api.md.


    **Pagination.** `GET /api/v1/pages` is cursor-based: pass `next_cursor` from the response as `cursor` until it is `null`. The next page is also in the `Link: ; rel="next"` header. Cursors are opaque.


    **Versioning and deprecation.** The major version is in the path (`/api/v1`). Within v1 changes are additive only: new endpoints, new optional parameters, new response fields. Clients must ignore unknown fields. A breaking change ships as `/api/v2`; v1 then keeps working and its responses carry a `Deprecation` header (RFC 9745) from the day the decision is made and a `Sunset` header (RFC 8594) with the removal date, at least 90 days later. `info.version` follows SemVer.


    **Batch and retries.** `POST /api/v1/batch` runs up to 10 GET operations in one request. All operations are read-only and have no side effects, so every request, including a batch, is safe to retry. An optional `Idempotency-Key` header on the batch is accepted and echoed back.


    All prices are net, excluding VAT. The only public price is the process workshop; implementation is quoted after it.'
  termsOfService: https://justautomate.ai/regulamin/
  contact:
    name: JustAutomate
    email: contact@justautomate.ai
    url: https://justautomate.ai/en/contact/
  license:
    name: Proprietary. Public content of justautomate.ai, free to read and quote with attribution.
    url: https://justautomate.ai/regulamin/
servers:
- url: https://justautomate.ai
  description: Production
security:
- {}
- agentOAuth:
  - mcp:read
tags:
- name: Offer
  description: 'Process workshop: the paid first step, with public prices per market.'
paths:
  /api/v1/workshop:
    get:
      operationId: getWorkshopOffer
      tags:
      - Offer
      summary: Get the process workshop offer
      description: 'The process workshop is how every JustAutomate engagement starts: the team maps how a process really runs, lists automation candidates with estimated hours saved, sets the implementation order and quotes the implementation. Returns the public price per week (net), usual duration, deliverables and the offer page for each market.'
      parameters:
      - $ref: '#/components/parameters/Market'
      responses:
        '200':
          description: Workshop offers.
          headers:
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Sunset:
              $ref: '#/components/headers/Sunset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkshopOffers'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/InvalidToken'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/Unavailable'
components:
  schemas:
    Problem:
      type: object
      description: Error in RFC 9457 format.
      required:
      - type
      - title
      - status
      - code
      properties:
        type:
          type: string
          format: uri
          description: Link to the description of this error in /api.md.
        title:
          type: string
          description: Short summary of the error type.
        status:
          type: integer
          description: HTTP status code.
        detail:
          type: string
          description: What went wrong in this request and how to fix it.
        instance:
          type: string
          description: Path of the request that failed.
        code:
          type: string
          enum:
          - invalid-parameter
          - invalid-body
          - unsupported-media-type
          - payload-too-large
          - unauthorized
          - invalid-token
          - not-found
          - method-not-allowed
          - rate-limited
          - unavailable
          - internal-error
          description: Machine-readable error code.
    WorkshopOffer:
      type: object
      required:
      - market
      - lang
      - currency
      - name
      - price
      - priceNote
      - summary
      - includes
      - notes
      - url
      properties:
        market:
          type: string
          enum:
          - PL
          - DE
          - AT
          - CH
          - INTL
        lang:
          type: string
          enum:
          - pl
          - en
          - de
        currency:
          type: string
          description: ISO 4217 code.
        name:
          type: string
        price:
          type: string
          description: Price per week as shown on the offer page, net.
        priceNote:
          type: string
          description: Unit and usual duration.
        summary:
          type: string
        includes:
          type: array
          items:
            type: string
        notes:
          type: array
          items:
            type: string
        url:
          type: string
          format: uri
          description: Offer page.
    WorkshopOffers:
      type: object
      required:
      - data
      - pricing
      - nextStep
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/WorkshopOffer'
        pricing:
          type: string
        nextStep:
          type: string
  headers:
    X-RateLimit-Remaining:
      description: Requests left in the window. Sent with 429, where it is 0.
      schema:
        type: integer
    X-RateLimit-Limit:
      description: Requests allowed per 60-second window.
      schema:
        type: integer
    Retry-After:
      description: Seconds to wait before retrying.
      schema:
        type: integer
    Sunset:
      description: 'Present only once a removal date is set (RFC 8594): the HTTP-date after which the endpoint stops answering, at least 90 days after Deprecation first appeared.'
      schema:
        type: string
    Deprecation:
      description: 'Present only once this endpoint or API version is deprecated: the date the deprecation took effect (RFC 9745). Absent on every endpoint today.'
      schema:
        type: string
    RateLimit:
      description: Remaining quota (IETF RateLimit header fields). Sent with 429, where it is 0.
      schema:
        type: string
    RateLimit-Policy:
      description: 'Quota policy (IETF RateLimit header fields): "ip";q=120;w=60 without a token, "agent";q=600;w=60 with one.'
      schema:
        type: string
  responses:
    InvalidToken:
      description: The bearer token is invalid or expired (code invalid-token). Call without a token or get a new one.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      headers:
        WWW-Authenticate:
          description: Bearer resource_metadata="https://justautomate.ai/.well-known/oauth-protected-resource", scope="mcp:read", error="invalid_token"
          schema:
            type: string
    BadRequest:
      description: A parameter or the request body is invalid (code invalid-parameter or invalid-body).
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    Unavailable:
      description: Site data is temporarily unavailable (code unavailable). Wait Retry-After seconds.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
    TooManyRequests:
      description: Rate limit exceeded (code rate-limited). Wait Retry-After seconds.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        RateLimit-Policy:
          $ref: '#/components/headers/RateLimit-Policy'
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
    InternalError:
      description: Unexpected error (code internal-error). Retry later.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
  parameters:
    Market:
      name: market
      in: query
      required: false
      description: PL (Poland, PLN), DE (Germany), AT (Austria), CH (Switzerland, CHF) or INTL (English-speaking clients, EUR). Omit to get all.
      schema:
        type: string
        enum:
        - PL
        - DE
        - AT
        - CH
        - INTL
  securitySchemes:
    agentOAuth:
      type: oauth2
      description: Optional. Identifies the agent and raises the rate limit to 600 requests per minute. Dynamic client registration and anonymous agent registration are described at https://justautomate.ai/auth.md.
      flows:
        authorizationCode:
          authorizationUrl: https://justautomate.ai/oauth/authorize/
          tokenUrl: https://justautomate.ai/oauth/token/
          refreshUrl: https://justautomate.ai/oauth/token/
          scopes:
            mcp:read: Read public content of justautomate.ai (REST API and MCP server).
externalDocs:
  description: 'Developer portal: quickstart, self-serve token, testing. Reference in Markdown: /api.md'
  url: https://justautomate.ai/developers/