{
  "openapi": "3.1.0",
  "info": {
    "title": "Remote Rocketship jobs API",
    "version": "1.0.0",
    "description": "Search remote jobs using an API key and an active subscription. Create your key in your Remote Rocketship account. Standard daily quota: 500 requests or 3000 returned jobs, whichever is reached first. Quotas reset at midnight UTC. Internal account, billing, and browser-only APIs are not part of this contract. Select the REST contract with RR-API-Version: 1; omitted headers retain version 1. Unsupported versions return 400 UNSUPPORTED_API_VERSION. Version 1 has no scheduled retirement. See https://www.remoterocketship.com/api-versioning.md for compatibility and RFC 9745/RFC 8594 deprecation signaling."
  },
  "servers": [
    {
      "url": "https://www.remoterocketship.com"
    }
  ],
  "externalDocs": {
    "url": "https://www.remoterocketship.com/api-docs/"
  },
  "security": [
    {
      "ApiKey": []
    }
  ],
  "paths": {
    "/api/openclaw/jobs/": {
      "post": {
        "operationId": "searchRemoteJobs",
        "summary": "Find matching remote jobs",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchRequest"
              },
              "example": {
                "filters": {
                  "page": 1,
                  "itemsPerPage": 20,
                  "jobTitleFilters": [
                    "Software Engineer"
                  ],
                  "locationFilters": [
                    "United States"
                  ]
                },
                "includeJobDescription": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Matching jobs and pagination.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                }
              }
            },
            "headers": {
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Standard account request policy using draft-ietf-httpapi-ratelimit-headers-11: \"daily-requests\";q=500;w=86400. Omitted for unlimited accounts."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "After quota lookup: \"daily-requests\";r=remaining;t=seconds-until-midnight-UTC. IETF draft-11 syntax, not a published RFC. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific daily job quota: 3000. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Remaining": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific remaining returned-job quota. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Reset": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific seconds until midnight UTC. Present only when quota is known and the account is limited."
              },
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid body or missing filters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Standard account request policy using draft-ietf-httpapi-ratelimit-headers-11: \"daily-requests\";q=500;w=86400. Omitted for unlimited accounts."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "After quota lookup: \"daily-requests\";r=remaining;t=seconds-until-midnight-UTC. IETF draft-11 syntax, not a published RFC. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific daily job quota: 3000. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Remaining": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific remaining returned-job quota. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Reset": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific seconds until midnight UTC. Present only when quota is known and the account is limited."
              },
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid, or revoked API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Standard account request policy using draft-ietf-httpapi-ratelimit-headers-11: \"daily-requests\";q=500;w=86400. Omitted for unlimited accounts."
              },
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "403": {
            "description": "Active subscription required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Standard account request policy using draft-ietf-httpapi-ratelimit-headers-11: \"daily-requests\";q=500;w=86400. Omitted for unlimited accounts."
              },
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "405": {
            "description": "Use POST.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "POST"
                }
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Standard account request policy using draft-ietf-httpapi-ratelimit-headers-11: \"daily-requests\";q=500;w=86400. Omitted for unlimited accounts."
              },
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "413": {
            "description": "Request body exceeds 1 MB.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Standard account request policy using draft-ietf-httpapi-ratelimit-headers-11: \"daily-requests\";q=500;w=86400. Omitted for unlimited accounts."
              },
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Daily quota reached: 500 requests or 3000 jobs per UTC day.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Standard account request policy using draft-ietf-httpapi-ratelimit-headers-11: \"daily-requests\";q=500;w=86400. Omitted for unlimited accounts."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "After quota lookup: \"daily-requests\";r=remaining;t=seconds-until-midnight-UTC. IETF draft-11 syntax, not a published RFC. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific daily job quota: 3000. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Remaining": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific remaining returned-job quota. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Reset": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific seconds until midnight UTC. Present only when quota is known and the account is limited."
              },
              "Retry-After": {
                "schema": {
                  "type": "string",
                  "pattern": "^[0-9]+$"
                },
                "description": "Wait this many seconds until the daily quota resets before retrying."
              },
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal error or job search unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Standard account request policy using draft-ietf-httpapi-ratelimit-headers-11: \"daily-requests\";q=500;w=86400. Omitted for unlimited accounts."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "After quota lookup: \"daily-requests\";r=remaining;t=seconds-until-midnight-UTC. IETF draft-11 syntax, not a published RFC. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Limit": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific daily job quota: 3000. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Remaining": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific remaining returned-job quota. Present only when quota is known and the account is limited."
              },
              "X-JobLimit-Reset": {
                "schema": {
                  "type": "string"
                },
                "description": "Application-specific seconds until midnight UTC. Present only when quota is known and the account is limited."
              },
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          }
        },
        "description": "Search remote job listings using the subscriber API key. Filters select roles by title, eligible location, seniority, salary, and technology. Returns application URLs and pagination; does not apply to jobs. Shares the subscriber quota with the CLI and MCP.",
        "parameters": [
          {
            "in": "header",
            "name": "RR-API-Version",
            "required": false,
            "description": "REST contract version. Omission retains version 1. Unsupported values return 400 UNSUPPORTED_API_VERSION.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ]
      }
    },
    "/api/openclaw/sandbox/": {
      "post": {
        "operationId": "previewRemoteJobSearch",
        "summary": "Try a fictional search response",
        "description": "Returns one fixed synthetic job without authentication or quota usage. Accepts a filters object but ignores its values. Never use the fictional result as a real job opportunity.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchRequest"
              },
              "example": {
                "filters": {
                  "page": 1,
                  "itemsPerPage": 20,
                  "jobTitleFilters": [
                    "Software Engineer"
                  ],
                  "locationFilters": [
                    "United States"
                  ]
                },
                "includeJobDescription": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A fixed fictional job and sandbox: true.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                }
              }
            },
            "headers": {
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid body or missing filters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "405": {
            "description": "Use POST.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "413": {
            "description": "Request body exceeds 1 MB.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          },
          "500": {
            "description": "Internal error or job search unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "RR-API-Version": {
                "description": "Selected REST contract version, also returned on errors.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "in": "header",
            "name": "RR-API-Version",
            "required": false,
            "description": "REST contract version. Omission retains version 1. Unsupported values return 400 UNSUPPORTED_API_VERSION.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ],
              "default": "1"
            }
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "API key from your account. This is an opaque key, not a JWT."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "message",
          "code",
          "hint"
        ],
        "properties": {
          "message": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "hint": {
            "type": "string"
          }
        }
      },
      "SearchRequest": {
        "type": "object",
        "required": [
          "filters"
        ],
        "properties": {
          "filters": {
            "type": "object",
            "description": "Optional filters. Omitted fields use the defaults. Unrecognized values are ignored or normalized.",
            "properties": {
              "page": {
                "type": "number",
                "exclusiveMinimum": 0,
                "default": 1,
                "description": "Page number, starting at 1."
              },
              "itemsPerPage": {
                "type": "number",
                "minimum": 1,
                "maximum": 50,
                "default": 20,
                "description": "Results requested per page, clamped to 1 through 50 and the remaining job quota."
              },
              "sortBy": {
                "type": "string",
                "enum": [
                  "DateAdded",
                  "Salary"
                ],
                "default": "DateAdded",
                "description": "DateAdded sorts newest first; Salary sorts highest salary first."
              },
              "language": {
                "type": "string",
                "enum": [
                  "en",
                  "br",
                  "de",
                  "fr",
                  "ca",
                  "gb",
                  "us"
                ],
                "default": "en",
                "description": "Language context used to normalize job titles. Defaults to English."
              },
              "jobTitleFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Job titles such as Software Engineer. Recognized synonyms normalize to canonical titles."
              },
              "locationFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Eligible countries, regions, or US state names. US and UK synonyms are accepted."
              },
              "locationCityFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "City names to include."
              },
              "seniorityFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Allowed levels: entry-level, junior, mid, senior, expert."
              },
              "employmentTypeFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Allowed values: full-time, part-time, contract, internship."
              },
              "companySizeFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Employee ranges: 1,10; 11,50; 51,200; 201,500; 501,1000; 1001,5000; 5001,10000; 10001,."
              },
              "keywordFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Required keywords. Terms are combined with AND."
              },
              "excludedKeywordFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Keywords to exclude."
              },
              "techStackFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Technologies used in the role, such as React or TypeScript."
              },
              "requiredLanguagesFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Required spoken-language codes to include, such as en or fr."
              },
              "excludeRequiredLanguagesFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Required spoken-language codes to exclude."
              },
              "industriesFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Company industries to include."
              },
              "excludeIndustriesFilters": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Company industries to exclude."
              },
              "visaFilter": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Visa sponsorship filter: h1b or uk-skilled-worker."
              },
              "degreeRequiredFilter": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "true",
                  "false",
                  null
                ],
                "description": "String true or false for whether a degree is required."
              },
              "isOnLinkedInFilter": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "true",
                  "false",
                  null
                ],
                "description": "String true or false for whether the role is listed on LinkedIn."
              },
              "hideGhostJobsFilter": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "true",
                  "only",
                  null
                ],
                "description": "true hides ghost jobs; only selects them. Null disables this filter."
              },
              "companyIdFilter": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Company identifier to restrict results to."
              },
              "minSalaryFilter": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Minimum annual salary in USD."
              },
              "showRemoteJobs": {
                "type": "boolean",
                "default": true,
                "description": "Include remote roles."
              },
              "showHybridJobs": {
                "type": "boolean",
                "default": false,
                "description": "Include hybrid roles."
              },
              "showOnsiteJobs": {
                "type": "boolean",
                "default": false,
                "description": "Include onsite roles."
              },
              "showJobsWithoutSalaryWithMinSalaryFilter": {
                "type": "boolean",
                "default": true,
                "description": "Include roles with undisclosed pay when a salary minimum is set."
              }
            }
          },
          "includeJobDescription": {
            "type": "boolean",
            "default": false,
            "description": "Include the full role description and requirements."
          }
        }
      },
      "SearchResponse": {
        "type": "object",
        "required": [
          "jobOpenings",
          "totalCount",
          "pagination"
        ],
        "properties": {
          "jobOpenings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "number"
                },
                "roleTitle": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "slug": {
                  "type": "string"
                },
                "roleDescription": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "roleRequirements": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "company": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "slug": {
                      "type": "string"
                    }
                  }
                },
                "salaryRange": {
                  "type": [
                    "object",
                    "null"
                  ]
                }
              }
            }
          },
          "totalCount": {
            "type": "number"
          },
          "pagination": {
            "type": "object",
            "required": [
              "page",
              "itemsPerPage",
              "totalCount",
              "totalPages",
              "hasNextPage",
              "hasPreviousPage"
            ],
            "properties": {
              "page": {
                "type": "number"
              },
              "itemsPerPage": {
                "type": "number"
              },
              "totalCount": {
                "type": "number"
              },
              "totalPages": {
                "type": "number"
              },
              "hasNextPage": {
                "type": "boolean"
              },
              "hasPreviousPage": {
                "type": "boolean"
              }
            }
          },
          "sandbox": {
            "type": "boolean",
            "description": "True only for the synthetic sandbox response."
          }
        }
      }
    }
  }
}
